2016-03-21 66 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]'将会是*未定义的行为* –