2016-03-21 117 views
-8

Python vs C程序崩潰(字符串操作)

程序的輸出是會是這樣的:

string1 : stack 
string2 : overflow 
changed string is : sotvaecrkf 

*字符串1的每第N個字符是字符串2

的第N個字符連接在一起,但我DEVC++是崩潰每次我運行並給予輸入到string1和string2

代碼在C:

#include<stdio.h> 
#include<string.h> 
void zips(); 


void main(){ 
zips(); 
} 


void zips(){ 

printf("enter string1:"); 
char s1[120],s2[120],s[120],y,z; 
scanf("\n%s",s1); 
printf("\nenter string2:"); 
scanf("\n%s",s2); 
int leng,increasedlength,i; 
int leng1=strlen(s1),leng2=strlen(s2); 
if(leng1==leng2){ 
    leng=leng1; 
} 
else if(leng1<leng2){ 
    increasedlength=leng2-leng1; 
    leng=leng2-increasedlength; 
} 
else{ 
    increasedlength=leng1-leng2; 
    leng=leng1-increasedlength; 
} 
for(i=0;i<=leng;i++){ 
    y=s1[i]; 
    printf("%s",y); 
    z=s2[i]; 
    printf("%s",z); 
    strcat(y,z); 
} 
} 
+0

,問題是......? – Biffen

+1

真的很難理解你在這裏要求的東西。你怎麼了?另外,你是什麼意思連接?這聽起來並不像你想要連接你的string1和string2。 – Cubic

+1

變量'y'和'z'是*單個字符*,而不是字符串,因此您不能將它們打印爲字符串,也不能將它們用於像'strcat'這樣的字符串函數中。編譯器應該對你的代碼發出警告,如果不啓用更多的警告。 –

回答

2

也許是這樣的。請注意,字符串連接不能在簡單的char類型上完成。

#include <stdio.h> 
#include <string.h> 

int main (void) { 
    char s1[] = "stack";       // skipped the string inputs 
    char s2[] = "overflow"; 
    char str[120]; 
    size_t i;          // var type returned by `strlen` 
    size_t index = 0; 
    size_t leng1 = strlen(s1); 
    size_t leng2 = strlen(s2); 
    size_t leng = leng1 <= leng2 ? leng1 : leng2; // ternary operation to get min length 
    if(leng == 0 || leng * 3 > sizeof str) 
     return 1;         // will not fit output string 
    for(i = 0; i < leng; i++) {      // note `<=` changed to `<` 
     str[index++] = s1[i];      // buiuld the output string 
     str[index++] = s2[i]; 
     str[index++] = ' ';       // pad string 
    } 
    str[index - 1] = '\0';       // terminate string 
    printf("%s\n", str); 
    return 0; 
} 

程序輸出:

so tv ae cr kf 
+0

您需要'if(leng * 3> = sizeof str)'來說明nul字符。 – FredK

+0

@FredK不,我在最後寫了不必要的空間。 –

+0

@FredK ...儘管你已經將我的注意力引向了0長度的情況,並且我已經編輯來捕獲它,因爲將最後的'nul'寫入'str [-1]'將會是*未定義的行爲* –