1
我有一些代碼從一個從套接字接收的字符串中獲取所有字符(連接沒問題,不包括連接到它的變量)。正如你所看到的,在預處理字符串log_res_str
我分配給我的字符串數組logins
,一切都很好。但是,當我打印出各自的登錄名時,它只顯示第二個登錄名。有什麼問題?只顯示最後一個字符串的字符串數組
int logincount = 2;
char login_buff[CHUNK_SIZE] = {0};
char *logins[100];
char log_res_str[CHUNK_SIZE] = {0};
for(int i = 0; i < logincount; i++)
{
int lenf = 0;
int received = 0;
memset(login_buff, 0, sizeof(login_buff));
// the length of the UID stored in the first byte
if((received = recv(client_sock, login_buff, CHUNK_SIZE, 0)) < 0)
DIE("Receive Error");
// getting the lenght of the login
lenf = login_buff[0] - '0';
for(int count = 1; count < lenf; count++)
log_res_str[count-1] = login_buff[count];
printf("log_res_str: %s\n", log_res_str);
logins[i] = log_res_str;
printf("login: %s\n", logins[i]);
// acknowledgment
if(send(client_sock, login_buff, sizeof(login_buff), 0) < 0)
DIE("Acknowledge Error");
}
這就是我得到:
log_res_str: root
log_res_str: _warmd
login: _warmd
login: _warmd
這就是我想要的:
og_res_str: root
log_res_str: _warmd
login: root
login: _warmd
'登錄[I] = 1 og_res_str'存儲一個指向'log_res_str'緩衝區的指針,而不是字符串本身。如果你想要一個字符串副本,你必須爲拷貝分配內存,然後複製(使用'malloc' +'strcpy'或'strdup')。 – SleuthEye 2015-04-05 21:05:50
@SleuthEye你可以把它給一個答案?工作,我想接受你的解決方案。 – jvitasek 2015-04-05 21:08:49