【发布时间】:2016-01-21 04:24:52
【问题描述】:
我正在用 C 语言编写一个简单的函数,它应该从字符串“abc”构建一个 char 数组——因此它应该构建 {'a','b','c'}——并返回一个指向该数组的指针。这是我的这个函数的代码:
char * makeArr()
{
static char arr[3];
sprintf(arr, "%s\n", "abc");
return arr;
}
当我在 main 中调用此方法时出现问题:
int main(int argc, char *argv[])
{
char *arr[3];
arr = makeArr();
return 0;
}
编译器抱怨类型转换/冲突。我已经玩了很长一段时间的指针,强制转换和取消引用,但似乎无法让它工作。请让我知道我的逻辑哪里错了。
【问题讨论】:
-
char *arr[3]是一个包含三个char *的数组。makeArr返回一个char *,而不是其中三个的数组。顺便说一句,"abc\n"有四个字符长,五个带有空终止符,因此您不应该尝试将其写入大小为 3 的缓冲区。 -
@hobbs 更新了我的缓冲区大小以拥有足够的空间。
-
你忘记了
sprintf(arr, "%s\n", "abc")后面的分号。 -
这段代码在很多层面上都是错误的......
-
从函数返回指向堆栈分配内存的指针是未定义的行为。您需要传入指针或动态分配空间。
标签: c arrays function pointers types