通过字符串迭代C中的分段错误
我对C非常陌生,我应该创建strtok函数。问题是,我不断收到分段错误在此代码:通过字符串迭代C中的分段错误
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."
,那么您正在修改数组的内容。
在C++它不会编译。 – Olaf
事情是,对于这个代码片段存在的函数,输入字符串作为字符串文字参数进来。所以我需要找到一种方法将文字复制到一个数组中,并且我不允许使用字符串库函数。 我很乐意接受这方面的建议。 – ChasetopherB
@ChasetopherB遍历字符串以获得它的长度。分配内存'char * modStr = malloc(strLen + 1)'。并用'memcpy'复制字符串内容。 – Nikita
你正在修改字符串字面..这是未定义的行为。试试'char newstring [] =“测试,测试,测试。”;'而是。 – yano
指针不是数组。您的代码调用未定义的行为。您尝试修改_string literal_。 – Olaf
你知道Literal String是什么吗? – Michi