2016-12-08 83 views
-1

我的代碼的這一部分是關於註冊。如何在動態二維數組中保存字符串?

我只能註冊一次,下一次程序停止。

什麼問題?

while (1) { /*usercounter initialized with 0*/ 
    printf("enter your order:\n"); 
    gets(buffer); 
    order = strtok(buffer, " "); 
    if (strcmp(order, "signup") == 0) { 
     usercounter++; 
     if (usercounter > 50) { 
      username=realloc(username,usercounter*sizeof(*username)); 
      password=realloc(password, usercounter*sizeof(*password)); 
     } 
     username[(usercounter - 1)] = (char *)malloc(50*sizeof(char)); 
     strcpy(username[usercounter - 1], strtok(NULL, " ")); 
     password[(usercounter - 1)] = (char *)malloc(50*sizeof(char)); 
     strcpy(password[usercounter - 1], strtok(NULL, "\n")); 
     free(buffer); 
     continue; 
    } 
} 
+1

[不要使用'gets()',這是危險的](http://stackoverflow.com/q/1694036/2173917)。改用['fgets()'](https://linux.die.net/man/3/fgets)。 –

+0

'免費(緩衝區);'!? – BLUEPIXY

+0

我在這裏看到的是非常危險的代碼和漏洞。我沒有足夠精通C語言來解決修復問題,而沒有引入其他錯誤,但在free,gets()問題後有一個用法,而且我看不到任何管理(計數)引用的方式,因此泄漏和錯誤很可能會發生。 – gelliott181

回答

0
free(buffer); 

這是爲什麼時,它會導致不確定的行爲,則釋放一個靜態存儲器。刪除上述語句。

休息很好。

+1

您如何知道'buffer'是靜態內存? – yano

相關問題