【发布时间】:2016-04-15 15:47:56
【问题描述】:
我有以下代码:
char * set_number(void)
{
// char * sname = malloc(sizeof(char) * 18); Original
char * sname = malloc(sizeof(char) * 19); // After EDIT 1
memset(sname, '\0', 19); // After EDIT 1
strcat(sname, "0x0012345678912345");
return sname;
}
char * get_number(void)
{
char * rnumber = set_number();
return rnumber;
}
char * work_with_number(void)
{
int i = 7;
char * wnumber = get_number();
if(strstr(wnumber, "0x00") != NULL)
{
wnumber += 4;
char c = i + '0';
// Would like to concatene c at the end of wnumber here
}
return wnumber;
}
int main(int argc, char **argv)
{
char * str = work_with_number();
fprintf(stdout, "str : %s\n", str);
return 0;
}
返回:
str : 12345678912345
正如评论中所写,我想将c 连接到wnumber。
但是,使用 strcat() 会导致内存转储。
另外内存需要释放到主函数中,不是吗?
我想我还是误解了这里的逻辑。
【问题讨论】:
-
除了 Sourav 说的:在
wnumber上加 4 理论上很好,但现在你不知道调用work_with_number后要释放哪个内存。 -
那么,您是否建议创建另一个缓冲区
str = (char *) malloc(strlen(sname)来存储字符串&sname[4]? -
是的,但可能是
str = malloc(strlen(sname) + 2)。您需要一个字符作为空终止符,一个字符作为要附加的“7”字符。另外,您不应该在 c 中转换malloc的返回值。
标签: c arrays pointers concatenation dynamic-memory-allocation