剥离c字符串的末尾后,我收到了访问冲突: "访问冲突读取位置0x00000000"
void stripEnds(char *src, char *dest)
{
int i, j;
free(dest);
j = strlen(src) - 1;
if (j <= 0)
dest = (char*)malloc(1);
else
dest = (char*)malloc(j);
i = 0;
while (i < j - 1)
{
dest[i] = src[i + 1];
i++;
}
dest[i] = 0;
}
...主要:
char *t = 0;
stripEnds("test", t);
std::cout << t << std::endl; // <- error here
如果我使用printf而不是cout,我也会收到错误。
答案 0 :(得分:1)
char *t = 0;
stripEnds("test", t);
std::cout << t << std::endl; // <- error here
默认情况下,C ++是按值传递的,因此在调用stripEnds
后,函数不会修改t
对象,t
对象的初始值仍为{ {1}}。要修改0
,您需要函数t
以获得引用参数或指向指针参数的指针(此处为stripEnds
)。
答案 1 :(得分:0)
我发现了一些能够完成我尝试的代码:
str = (char*)calloc(strlen(txt) - 1, sizeof(char));
strncpy(str, &txt[1], strlen(txt) - 2);