我目前正在编写一个解析来自流的输入的测试程序。我不会详细介绍这个程序,但我目前正在尝试解析字母数字字符,然后将它们分配给一个临时字符串,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