編輯:好吧,所以出於某種原因,我認爲scanf行會在整行讀取一個字符串(多個參數)。大腦必須真的被炸。感謝大家的幫助。說,當我把一個項目放在數組的開頭
我想將一些字符放入數組中。這是代碼的外觀。
編輯:添加更多的代碼,希望能夠解決問題 Edit2:我可以像在這個函數中的字符串一樣對待字符指針「消息」嗎?
//in main...
printf("Enter a command> ");
scanf("%s", buf);
message = convertMessage(buf);
//....
char* convertMessage(char *message){
char *convMess = calloc(50, sizeof(char));
char *tok = strtok(message, " ,");
if(convMess == NULL){
perror("memory error");
exit(-5);
}
if(strcmp(tok, "get") == 0){
tok = strtok(NULL, " ,");
if(strcmp(tok, "lname") == 0){
convMess[0] = '1'; // seg faults on this line
convMess[1] = ' ';
strcat(convMess, tok);
return convMess;
}
else if(//...
//...and so on
//output from gdb
Program received signal SIGSEGV, Segmentation fault.
0x0000000000400e5d in convertMessage (
message=0x7fffffffbfa0 "get") at client.c:135
135 if(strcmp(tok, "lname") == 0){
(gdb) quit
我知道我可能誤解的東西很簡單,但我一直在這個代碼這麼長時間,我認爲我的腦海裏炸。另外,我已經檢查過在線參考資料,並且cplusplus.com/reference上的代碼看起來與我擁有的相同。
謝謝你的幫助。
您的代碼是:將它傳遞給
strcmp()
,像這樣的例子之前精細。也許你應該檢查conMess不是NULL ......但我不認爲問題在那裏。 –
還需要在調用'strcmp'(x2)之前檢查'tok'是否爲NULL。 –
你確定第二次調用'strtok()'沒有返回NULL,並且崩潰在第二次'strcmp()'調用中沒有發生嗎? –