为什么在下面的代码中出现段错误?我希望它能打印出第一个单词“嘿”。我知道还有其他方法可以做我想做的事情,但是我想知道为什么这失败了。请帮忙。

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/

10-10 18:16