删除空间程序中的分段错误

时间:2014-08-12 04:49:21

标签: c

我正在尝试通过删除C中字符串中的空格来编写程序。我尝试使用gdb进行调试,但我想我在使用该工具时并不是很了解。我的代码如下:

#include<stdio.h>

void RemoveSpaces(char * str){
    char *var1, *var2;
    var1 =  str; var2 = str;
    while(*var1 != '\0'){
        if(*var1 != ' '){
            *var2 = *var1;
            var2++;
        }
        var1++;
    }
    *var2 = '\0';
}

int main(){
    char *str = "abc de";
    printf("Before: %s\n", str);
    RemoveSpaces(str);
    printf("After: %s\n", str);
    return 0;
}

我试着在var1和var2上设置监视,但是我在编写自己的*var2 = *var1;之前找到了*i = *j++;我想找到一些代码here的SIGSEGV。当然,答案表明它未经测试,但我在我得到错误的行上做了类似的声明。为什么*var2 = *var1;在{{1}}会发生错误({1}}时会出错? (我不希望有人删除我的错误。我只是想知道为什么我可能会收到此错误,以便将来可以避免它。)

1 个答案:

答案 0 :(得分:1)

您无法修改字符串文字 - 更改:

char *str = "abc de";

为:

char str[] = "abc de";