将索引解除引用指针分配给c中的字符串时出现Segfault错误
问题描述:
print
语句按预期执行,如果在if
语句中打印line[0]
,则它也按预期打印。但是,gdb
告诉我,在if
声明中发生了segfault
。我误解了如何访问string
中的字符?将索引解除引用指针分配给c中的字符串时出现Segfault错误
编辑的代码卸下IRRELEVANT错误
void setflags(char** linep)
{
char* line = *linep;
while(strlen(line))
{
printf("%s\n",line);
if (line[0] == '.')
line[0] = '*';
else if (line[0] == ' ')
(*linep) ++;
else
break;
line = *linep;
}
}
答
忽略了问题的循环风格,你的赛格故障是不能诊断,能够直到你展示你是如何使用这个功能。我怀疑你在一个只读的字符串传递,如:
char *string = "this is read-only string literal";
setflags(&string); // error
如果你正在做这样的事情,你必须让修改通过使用数组:
char string[] = "this is a modifiable character array";
setflags(&string); // no error
你忘了,包括导致问题的一些示例输入。 –
'while(strlen(line))'基本上是一个无限循环。而且你没有向我们展示'linep'是如何初始化的。你可以写入未分配的内存。 –
@ Jean-FrançoisFabre打破几乎总是会发生,而不是strlen返回0,如果给一个指向包含'\ 0'的位置的指针? – user3504732