gpt4 book ai didi

c - 无法解决 Valgrind 给出的未初始化值错误

转载 作者:太空宇宙 更新时间:2023-11-04 08:30:58 24 4
gpt4 key购买 nike

我目前正在编写一个解析来自流的输入的测试程序。我不会详细介绍这个程序,但我目前正在尝试解析字母数字字符,然后将它们分配给临时字符串 temp[100]。将所有有效字符分配给 temp 后,我将内存和 strncpy 分配给分配的字符串变量。

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 中以 null 终止您的字符串,因此 strlen()strcpy() 都在读取过去的初始化值你的数组,因此 Valgrind 给你的未初始化值错误。

改变:

char temp[100];

到:

char temp[100] = {0};

你应该很好。

关于c - 无法解决 Valgrind 给出的未初始化值错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28387286/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com