将索引解除引用指针分配给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; 
    } 
} 
+0

你忘了,包括导致问题的一些示例输入。 –

+1

'while(strlen(line))'基本上是一个无限循环。而且你没有向我们展示'linep'是如何初始化的。你可以写入未分配的内存。 –

+0

@ Jean-FrançoisFabre打破几乎总是会发生,而不是strlen返回0,如果给一个指向包含'\ 0'的位置的指针? – user3504732

忽略了问题的循环风格,你的赛格故障是不能诊断,能够直到你展示你是如何使用这个功能。我怀疑你在一个只读的字符串传递,如:

char *string = "this is read-only string literal"; 
setflags(&string); // error 

如果你正在做这样的事情,你必须让修改通过使用数组:

char string[] = "this is a modifiable character array"; 
setflags(&string); // no error