2016-11-30 32 views
0

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

回答

0

忽略了問題的循環風格,你的賽格故障是不能診斷,能夠直到你展示你是如何使用這個功能。我懷疑你在一個只讀的字符串傳遞,如:

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

如果你正在做這樣的事情,你必須讓修改通過使用數組:

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