我在链表中有数字,我应该转换为char *并返回 .
这是问题可能存在的功能 .
char* int_str(struct Node** head,char* result) //head is pointer to singly linked list
{
struct Node* temp = *head;
char* string1="";
char* str;
while(temp != NULL)
{
string1=myitoa(temp->data,string1); // myitoa() works fine
str=(char*)malloc(1+strlen(string1));
strcpy(str,string1);
strcat(result,str);
temp=temp->next;
}
return result;
}
对temp-> data的最后一次调用总是会产生未知的垃圾值 . (链接列表正确构建,因为打印链接列表正常工作 . )
示例:链接列表为1-> 2-> 3
最后一次调用函数中的temp-> data给出50(一些垃圾值),即1-> 2-> 50
在主函数中,列表正确地给出1-> 2-> 3
最后一个变量在此函数中最终为垃圾但在主函数中正确显示为什么?
3 回答
这声明了一个指针,但没有为字符串分配缓冲区 . 这个未初始化的指针传递给
myitoa
有点令人困惑,因为myitoa
不能对它做任何事情而不会导致未定义的行为 .该行总是在32位系统上分配5个字节:
sizeof(string1)
是 pointer 的大小,而不是字符串的大小 . 使用相反,或甚至更好地使用
因为the result of malloc should not be casted.
这段代码很可能会完成这项工作 . 没有必要malloc . str定义为20个字符的数组 . 这是存储ASCII数字的位置 .
我不认为问题在于字符串操作 . 最有可能的是它与链表的创建有关 . 试试这个:
首先,尝试在循环中打印temp-> data的值 . 可能它应该是垃圾(在这种情况下,列表创建包含问题) . 如果打印值正确,则检查正在返回的"result"字符串是否保持相同的值 . 如果没有,那么问题在于myitoa功能 .
在这里我假设myitoa正在为string1分配内存 . (如果没有,那么你必须在将它传递给函数或myitoa之前为它分配一些内存 .