由于strcpy和strcat而导致段故障

时间:2018-07-25 16:01:51

标签: c string

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

2 个答案:

答案 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;
}