迭代字符串时C中的分段错误

迭代字符串时C中的分段错误,c,C,我对C非常陌生,我应该创建strtok函数。问题是,我在这段代码中不断遇到分段错误: char *newstring = "testing, testing, tested." while(*newstring != '\0' ){ /*replace delimiters with nulls*/ printf("STARTING ITERATION\n"); if(*newstring ==','){ *newstring='\0'; }

我对C非常陌生,我应该创建strtok函数。问题是,我在这段代码中不断遇到分段错误:

char *newstring = "testing, testing, tested."
while(*newstring != '\0' ){
    /*replace delimiters with nulls*/
    printf("STARTING ITERATION\n");
    if(*newstring ==','){
        *newstring='\0';
    }

    printf("newstring char in loop: %c\n", *newstring);
    /*printf("delimiters char in loop: %c\n", *delimiters);*/
    newstring++;
    printf("END OF ITERATION\n");
}
printf("OUT OF ITERATION");
因此,产出是:

STARTING ITERATION
newstring char in loop: t
END OF ITERATION
STARTING ITERATION
newstring char in loop: e
END OF ITERATION
STARTING ITERATION
newstring char in loop: s
END OF ITERATION
STARTING ITERATION
newstring char in loop: t
END OF ITERATION
STARTING ITERATION
newstring char in loop:
END OF ITERATION
STARTING ITERATION
newstring char in loop: t
END OF ITERATION
STARTING ITERATION
newstring char in loop: e
END OF ITERATION
STARTING ITERATION
newstring char in loop: s
END OF ITERATION
STARTING ITERATION
newstring char in loop: t
END OF ITERATION
STARTING ITERATION
newstring char in loop:
END OF ITERATION
STARTING ITERATION
newstring char in loop: t
END OF ITERATION
STARTING ITERATION
newstring char in loop: e
END OF ITERATION
STARTING ITERATION
newstring char in loop: s
END OF ITERATION
STARTING ITERATION
newstring char in loop: .
END OF ITERATION
Segmentation fault (core dumped)

所以,它看起来好像一直到字符串的末尾和循环的最末端,但实际上并没有使它脱离循环。我不确定我遗漏了什么。

您正在尝试修改字符串文字,这在C中是不允许的。如果您将
char*newstring=“testing,testing,tested.”
更改为
char newstring[]=“testing,testing,tested.”
,则您正在修改数组的内容。

您正在修改字符串文字。。这是未定义的行为。试试char newstring[]=“测试,测试,测试。”指针。指针不是数组。您的代码调用未定义的行为。你试图修改字符串文字。你知道什么是文字字符串吗?@Michi:你是说字符串文字。“文字字符串”可能是文学作品中的某些文本;-)人们可能会搜索一个自己不知道的短语:@olaf Yes you right.:)在C++中,它不会编译。对于这个代码段存在的函数,输入字符串作为字符串文字参数输入。因此,我需要找到一种将文本复制到数组中的方法,还有一个额外的好处,就是我不允许使用字符串库函数。我愿意接受这方面的建议。@ChasetopherB迭代字符串以获得其长度。分配内存
char*modStr=malloc(strLen+1)
。并使用
memcpy
复制字符串内容。