为什么在下面的代码中出现段错误?我希望它能打印出第一个单词“嘿”。我知道还有其他方法可以做我想做的事情,但是我想知道为什么这失败了。请帮忙。
int main(){
char string[30], ops1[30], temp;
char t[2];
int op1, i=0;
strcpy(string, "hey ssup");
while(string[i] != '\0') {
if(string[i]!= ' '){
temp = string[i];
strcpy(ops1, &temp);
i++;
while(string[i] != ' ') {
temp = string[i];
strcpy(t, &temp);
strcat(ops1, t);
}
}
i++;
}
printf("%s", ops1);
return 0;
}
最佳答案
如果是单个字符,则不需要strcpy()
和strcat()
。您可以借助ops1[j] = string[i];
之类的索引直接复制。
您也忘记添加ops1[j] = '\0';
字符串终止符。您需要指定\0
结束字符串。
您的while(string[i] != ' ')
不会以(is an infinite loop)
结尾,因为i
在该循环中没有更改。这个问题可以通过一个循环来解决。
试试这个代码:-
#include <stdio.h>
int main()
{
char string[30], ops1[30];
char t[2];
int op1, i, j;
strcpy(string, "hey ssup");
j = 0;
i = 0;
while (string[i] != '\0')
{
ops1[j++] = string[i]; // coping
if (string[i] == ' ') // stops when first ' ' found
{
break;
}
i++;
}
ops1[j] = '\0';
printf("%s", ops1);
return 0;
}
输出:-
hey
关于c - 由于strcpy和strcat而导致段故障,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51523276/