我正在尝试将字符串的字符复制到动态数组中。以下是我正在使用的内容:
void foo(const char * string, char ** final)
{
unsigned long n = strlen(string);
final = (char **)malloc(n+1);
for (int i = 0; i < n; ++i)
{
final[i] = string[i]; // error here
}
}
构建失败并指向标记为&#34;此处出错的行。&#34;出现错误:
Incompatible integer to pointer conversion assigning to 'char *' from 'const char.'
我认为问题在于我创建数组/使指针正确。
答案 0 :(得分:3)
假设final
是您的输出参数,您需要取消引用它以分配malloc的结果,然后再次为循环中的赋值
*final = malloc(n+1);
for (int i = 0; i < n; ++i) {
(*final)[i] = string[i];
}
再次假设您的预期用法类似于以下内容
input_str = "some text";
char* copy;
foo(input_str, ©);
虽然问题为什么不让api返回副本?
char* copy = foo(input_str);
答案 1 :(得分:0)
如果通过引用传递NULL句柄(指向指针的指针),原始代码将无法正常工作。因此,在foo()中进行所有分配业务没有多大意义:如果foo()没有返回 final ,则它在foo外部不可用( )除非已经初始化,恕我直言。然后句柄有意义,foo()将第二个字符串的地址作为参数,而不必返回它。让我们考虑这个示例代码,基于原始帖子(包括调试打印):
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void foo(const char * string, char ** final)
{
(*final) = (char *)malloc(n+1);//we deference the address to reach and size the variable
printf("From foo: ");
for (unsigned long i = 0; i < strlen(string); ++i)
{
(*final)[i] = string[i];
printf("%c",(*final)[i]);
}
printf("\n");
}
为了简单起见,我们假设foo()以下列方式从另一个函数调用:
int main(int argc, const char * argv[])
{
char *fin;
char *str = "string";
foo(str, &fin);
printf("From main: ");
for(unsigned long j = 0; j < strlen(fin); j++)
printf("%c", fin[j]);
printf("\n");
return 0;
}
它会起作用,但是为了什么?恕我直言,有更简单的方法可以达到同样的效果。希望这可以提供帮助。