我目前正在編寫一個解析來自流的輸入的測試程序。我不會詳細介紹這個程序,但我目前正在嘗試解析字母數字字符,然後將它們分配給一個臨時字符串,temp [100]。在將所有有效字符分配給temp後,我分配內存並將strncpy分配給分配的字符串變量。解決Valgrind給出的未初始化值錯誤的問題
Valgrind的抱怨我的strlen的兩種用法,我的單次使用函數strncpy的。爲什麼是這樣?它抱怨未初始化的值,但我明確表示,除非temp內有字符,否則不會進行任何分配。有什麼建議麼?
char *name(char a)
{
int x;
char c;
char *returnName = 0;
char temp[100];
int i = 0;
/* Ensures no character is skipped */
temp[i] = a;
i++;
/* Fill temp one character at a time */
while((x = getchar()) != EOF)
{
c = (char)x;
/* Valid characters are assigned */
if((isalnum(c)) || c == '_')
{
temp[i] = c;
i++;
}
/* As soon as invalid character appears, exit loop */
else
break;
}
/* Make sure temp is not NULL before mallocing */
if(temp[0] != '\0') /* Thank you Alter Mann for this fix */
{
printf("Before malloc\n");
returnName = malloc(sizeof(char)*strlen(temp)+1);
printf("After malloc before strncpy\n");
strncpy(returnName, temp, strlen(temp)+1);
printf("After strncpy before return\n");
return returnName;
}
/* If nothing is assigned, return NULL */
return NULL;
}
你永遠不會在'temp'中終止你的字符串。 – 2015-02-07 20:59:22
哇。我不能相信我忘了那件事。我現在會這樣做,並報告回來。 – Plaidypus 2015-02-07 21:00:37