迭代字符串时C中的分段错误
我对C非常陌生,我应该创建strtok函数。问题是,我在这段代码中不断遇到分段错误:迭代字符串时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'; }
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
复制字符串内容。