尝试更改C中字符串指针的内容时出错

时间:2015-02-15 10:46:53

标签: c arrays pointers

我正在使用C语言编写程序,其中一个关键函数定义如下:

void changeIndex(char* current_index)
{
    char temp_index[41]; // note: same size as current_index
    // do stuff with temp_index (inserting characters and such)
    current_index = temp_index;
}

但是,此功能对current_index没有影响。我以为我找到了一个修复程序,并尝试将最后一行更改为

strcpy(current_index, temp_index)

但这给了我另一个错误。谁能发现我在这里做错了什么?我基本上只想在每次调用current_index时将temp_index的内容设置为changeIndex的内容。

如果需要更多信息,请告知我们。

3 个答案:

答案 0 :(得分:1)

如果strcpy指向分配的足够大小的内存,则

current_index应该有效。请考虑以下示例,其中changeIndex需要其他参数 - 分心字符串的大小:

void changeIndex(char* current_index, int max_length)
{
    // check the destination memory
    if(current_index == NULL)
    {
        return; // do nothing
    }
    char temp_index[41]; 
    // do stuff with temp_index (inserting characters and such)

    // copy to external memory, that should be allocated
    strncpy(current_index, temp_index, max_length-1);
    current_index[max_length-1] = '\0';
}

注意:strncpy优于temp_index长于current_index的情况。

用法示例:

    // example with automatic memory
    char str[20];
    changeIndex(str, 20);
    // example with dinamic memory
    char * ptr = (char *) malloc(50);
    changeIndex(ptr, 50);

答案 1 :(得分:-1)

显然在堆栈上定义一个本地char数组并返回指向它的指针是错误的。你不应该这样做,因为在函数结束后没有定义内存。

除了之前的答案:strncpy char指针(对我来说似乎不安全),以及更安全的malloc,但你需要记住在函数之外释放它(并且它与层次结构不一致)程序)您可以执行以下操作:

char* changeIndex()
{
    static char temp_index[41]; // note: same size as current_index
    // do stuff with temp_index (inserting characters and such)
    return temp_index;
}

由于char数组是静态的,因此在函数结束时不会被定义,并且您不需要记住在使用结束时释放指针。

警告:如果您使用多个线程,则无法使用此选项,因为静态内存可能会被同时进入该功能的不同线程更改

答案 2 :(得分:-3)

您的数组temp_index是本地的功能,然后*current_index不接受你想要的。

你也可以使用函数strdup。函数返回复制字符串的开始内存位置,或NULL如果发生错误,可以说(char *strdup(char *)

char temp[] = "fruit";
  char *line = strdup(temp );