剥离c字符串结尾后的访问冲突

时间:2015-01-18 15:55:11

标签: c++

剥离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,我也会收到错误。

2 个答案:

答案 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);