我正在使用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
的内容。
如果需要更多信息,请告知我们。
答案 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 );