2011-09-01 58 views
0
printf("what is your name?"); 
    gets(send_name); 

    strcpy(send_name2, strcat("You are connected to ", send_name)); 
    send(connected, send_name2, strlen(send_name2), 0); 

其他可執行文件沒有收到什麼我送...我想用c和套接字做一個簡單的聊天程序。當我幾件事情後,運行它,它說程序接收到的信號EXC_BAD_ACCESS

nbytes_recieved = recv(sock, recv_name, 50 ,0); 
recv_name[nbytes_recieved] = '\0'; 

這是我在客戶端代碼中使用的代碼讓它接收字符串。

謝謝, SIDD

+1

請顯示完整的代碼。 –

+0

發佈這類問題時,有助於發佈更多代碼。例如,如何定義「send_name」? –

+0

對於圖靈的愛,千萬不要使用'gets(3)'! – jwodder

回答

4

strcat期望作爲其第一個參數的可寫緩衝區。你給它的是一個常量字符串,可能存儲在進程的只讀區域的某個地方。函數試圖在這個常量字符串之後立即寫入,這會導致內存訪問衝突。

2

EXC_BAD_ACCESS相當於分段錯誤,通常是一個空指針引用,或不分配給進程訪問內存。如果recv_name太小而不能容納接收到的所有字節加上終止的'\ 0',則可能會導致這種情況。

要開始調試,請使用調試符號進行編譯,然後在該代碼中的各個位置開始檢查recv_name的內容。

相關問題