gpt4 book ai didi

c - Unix/C - 2 种方法有不同的行为

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

我是 UNIX C 开发的初学者,需要一点帮助。我有这两个功能:

void edit_char(){

int i;
int length = strlen(expression);
char *tmp = (char *) malloc((length+1)*sizeof(char));
pom[0]='*';
for(i=1;i<length+1;i++){
tmp[i] = expression[i-1];
}
strcpy(expression,tmp);
free((void *) tmp);
}



char *edit_char2(char *string){

int i;
int length = strlen(string);
char *tmp = (char *) malloc((length+1)*sizeof(char));
tmp[0]='/';
for(i=1;i<length+1;i++){
tmp[i] = string[i-1];
}
strcpy(string,tmp);
free((void *) tmp);
return string;
}

edit_char() 编辑全局变量 char *expression - 它在开头放置一个符号“*”。第二个 edit_char2() 做的几乎相同,但它不是编辑全局变量,而是编辑参数中的字符串。

第一个函数工作正常,问题出在第二个函数的 tmp 变量上。 Malloc 不会返回大小为 (length+1) 的空字符数组。它返回“xd\372\267xd\372\267\020”。

这可能是什么原因造成的?

最佳答案

malloc 只是返回一个指向新分配的内存的指针,这不能被认为是“空的”。如果你想“清空”它 - 即用 NULL 填充你的内存,你需要手动执行需要使用 calloc或手动填写,例如:

编辑:另外我认为,由于您要向每个字符串添加一个字符,因此您不应该使用

newstring = malloc((strlen(string) + 1) * sizeof(char))

而是

newstring = malloc((strlen(string) + 2) * sizeof(char))

为新字符和终止符 \0 分配空间。

EDIT2:这也意味着您的功能无法工作/不安全!您正在尝试使 stringexpression 包含的字符比它们最初可能分配给 !

的字符多 1 个

关于c - Unix/C - 2 种方法有不同的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13541690/

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