我知道這已被問過,但以前的答案已經說過你不能修改字符串,除非我誤解我不是。我可以使用strtok_r直到最後一行輸入,然後我得到一個seg錯誤。爲什麼會發生?下面是我的代碼的簡化版本。從打印我知道它通過得到b處理,但是然後有一個seg故障?Strtok_r分段錯誤
#include <stdio.h>
#include <string.h> //strlen
#include <stdlib.h>
void handler(char * input){
char * end_str;
char * token =strtok_r(input, "\n", &end_str);
char * endd_str;
char * token2= strtok_r(token, " ", &endd_str);
while(token!=0){
printf("%s\n",token);
token=strtok_r(NULL,"\n",&end_str);
while(token2 !=0){
token2 =strtok_r(NULL," ",&endd_str);
printf("%s\n",token2);}
}
}
int main(int argc , char *argv[])
{
char test[100]="set a,10.5\nset b,11.5\nget b\nadd e,a,b\nsub g,a,b";
handler(test);
return 0;
}
是否也提供了代碼失敗?如果沒有,你沒有提供足夠的數據給任何人告訴你爲什麼失敗。請參閱http://stackoverflow.com/help/mcve –
無法用您提供的示例代碼重新創建seg故障。你確定它是'strtok_r'這是導致seg故障,而不是別的。 – Munir
你爲什麼認爲程序執行會導致一些有意義的事情?你可以查看生成的二進制代碼,看看你的情況會發生什麼。 – user502144