我有这样的东西
char *temp, xyz;
temp = (char *)malloc(sizeof(somestring));
xyz = (char *) malloc(sizeof(temp));
xyz= strrchar(temp, "_"); // temp does not contain "_", but need to check for error validation
现在如果我尝试做
免费(临时);
它崩溃了;
任何想法,我是初学者。
第一个问题是xyz
is not被宣布为char *
,只有一个char
.
给出以下变量声明:
char *temp, xyz;
-
temp
是一个指向 a 的指针char
.
-
xyz
只是一个char
.
The *
doesn't适用于两个变量。使两个变量都指向char
, use:
char *temp, *xyz;
下一篇:你混淆了sizeof
with strlen
. sizeof
给出类型或该类型的变量占用的大小。因此,如果temp
is a char *
, then sizeof(temp)
将是指针的大小,notC 字符串的长度。获取 C 字符串长度 - 例如获取复制给定 C 字符串所需的缓冲区大小 - 使用strlen http://en.cppreference.com/w/c/string/byte/strlen.
最后,除非您省略了一些重要的代码,否则还会出现另一个问题:简单地使用malloc
不会对新分配的内存执行任何操作,因此之后:
temp = (char *)malloc(sizeof(somestring));
temp
指向未初始化的内存位(如上所述,它可能比您想象的要小,这是由于使用sizeof
而不是strlen
)。然后你继续use temp
就好像它是一个有效的 C 字符串一样strchr
。这可能会访问不属于您的内存,从而调用未定义的行为。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)