输出为分段故障(核心转储(。错误线是第12行,但我不明白为什么这会成为一个问题。如果ret被分配了一个内存位置,并且等于某个值,为什么会输出分段错误?
代码为:
#include <stdio.h>
#include <string.h>
int main() {
const char *tmp = "This string literal is arbitrary";
char *ret;
ret = strstr(tmp, "literal");
strcpy(ret, "");
if (ret)
printf("found substring at address %pn", ret);
else
printf("no substring foundn");
return 0;
}
修改字符串文字是未定义的行为,tmp
指向这样的文字。如果你想修改它,你需要对被允许修改的文字进行复制-strstr()
不这样做,它只是给你一个指向原始文字的指针。
当然,如果你使用下面的表格,这个特殊的问题就会消失:
char tmp[] = "This string literal is arbitrary";
这在功能上为您提供了文字的可写副本。