首页 > 解决方案 > 由于 strcpy 和 strcat 导致的 Seg 错误

问题描述

为什么我在下面的代码中会出现 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;
}

标签: cstring

解决方案


如果是单个字符,则不需要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;
}

输出 :-

hey

推荐阅读