我已将成员变量的值分配为:
myValue = (char*)malloc(strlen(inValue) * sizeof(char));
strcpy(mValue, inValue);
在分配时,该值是正确的(采取printf输出):
http://www.w3.org/2001/XMLSchema
但是,当我在病房之后得到它的价值时,我得到它:
http://www.w3.org/2001/XMLSchema(!
这个问题可能是什么问题
答案 0 :(得分:15)
strlen()返回但不包括终止NUL,因此您需要在malloc()中返回1。因此myValue最终没有终止。
myValue = malloc((strlen(inValue) + 1) * sizeof(char));
答案 1 :(得分:2)
strcpy(myValue,inValue)函数将字符串inValue的内容复制到malloc分配的内存块中,该字符串附加了字符串终止控制字符'\ 0'。
一旦strlen(inValue)返回不包含'\ 0'控件字符串的字符串长度,malloc分配的区域(strlen(inValue)* sizeof(char))不足以接收strcpy(myValue, inValue)。
因此,'\ 0'字符被复制到不允许的内存位置,覆盖其他程序数据,并可能导致段错误,BAD ACCESS,GPF或其他类似错误消息并显示不可预测的结果,具体取决于在编译器/操作系统/平台上。
在你的情况下,你在执行strcpy之后得到了一个正确的结果,但是稍后字符串似乎被破坏了,因为'\ 0'已被复制到一个不属于分配给myValue的块,该块的所有者可能只是更改它,并且您的字符串将丢失其结束后缀。因此,如果您在此之后尝试再次打印myValue,则可能会显示程序错误或仅显示垃圾。
要更正您的代码,必须增加要分配的区域,如下面的代码所示。
还有一件事......在你的例子中,你写了strcpy(mValue,inValue)而不是strcpy(myValue,inValue),但我认为你在撰写帖子时输入错误。
myValue = (char*)malloc((strlen(inValue) + 1) * sizeof(char));
strcpy(myValue, inValue);
答案 2 :(得分:1)
您不应该从malloc调用转换返回类型。并且始终包含stdlib.h。
myValue = malloc((strlen(inValue) + 1) * sizeof(char));
希望有所帮助,