为什么在下面的代码中会出现segfualt?我希望它能打印出第一个单词“嘿”。我知道还有其他方法可以做我想做的事情,但是我想知道为什么这失败了。请帮忙。
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;
}
答案 0 :(得分:1)
如果是单个字符,则不需要((start[i]*step_size)/100)
和strcpy()
。您可以像strcat()
一样借助 index 直接复制。
您还忘记添加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;
}
答案 1 :(得分:-1)
由于第二次while循环而出现段错误,正确的代码在下面
int main()
{
char string[30], ops1[30], temp;
char t[2];
int i=0;
strcpy(string, "hey ssup");
while(1)
{
if(string[i]!= ' ')
{
temp = string[i];
strcpy(&ops1[i], &temp);
}
else
{
ops1[i]='\0';
break;
}
i++;
}
printf("%s\n", ops1);
return 0;
}