我有这样的事情
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
Run Code Online (Sandbox Code Playgroud)
现在如果我尝试做免费(临时); 它的崩溃;
任何想法,我是一个初学者.
pb2*_*b2q 14
第一个问题是,xyz是不是被声明为一个char *,只有一个char.
给出以下变量声明:
char *temp, xyz;
Run Code Online (Sandbox Code Playgroud)
temp是指向a的指针char.xyz只是一个char.在* 不适用于两个变量.要使两个变量指向char,请使用:
char *temp, *xyz;
Run Code Online (Sandbox Code Playgroud)
下一页:你混淆的使用sizeof与strlen.sizeof为您提供该类型的类型或变量占用的大小.所以,如果temp是a char *,那么sizeof(temp)将是指针的大小,而不是 C字符串的长度.要获得C字符串长度 - 例如,要获得复制给定C字符串所需的缓冲区大小 - 请使用strlen.
最后,除非你省略了一些重要的代码,否则会出现另一个问题:简单地使用malloc不会对新分配的内存做任何事情,所以在:
temp = (char *)malloc(sizeof(somestring));
Run Code Online (Sandbox Code Playgroud)
temp指向未初始化的内存位(如上所述,可能比您认为的更小,sizeof而不是使用strlen).然后你继续使用 temp,好像它是一个有效的C字符串,用strchr.这可能会访问不属于您的内存,从而调用未定义的行为.