【发布时间】:2019-07-10 11:19:18
【问题描述】:
目的:我的主要目的是在某种函数中创建一个字符串,它应该返回一个地址,通过使用 main 中的字符串返回地址。 但是我学习了 char 数组和 char 指针实际上用于相同的目的。
如果我们认为这是真的,我们有这些声明:
char *arr 和 char arr[10] ,*(arr+9)=arr[10] 不是吗?
应用程序 1不工作。
应用程序 2工作正常。
应用 1:
#include <stdio.h>
char *foo(char arr[]);
int main(void)
{
char example[10];
example=foo(example);
printf("%s\n",example);
return 0;
}
char *foo(char arr[])
{
arr[10]="attempt";
return arr;
}
应用 2:
#include <stdio.h>
char *foo(char*);
int main(void)
{
char *example;
example=foo(example);
printf("%s\n",example);
return 0;
}
char *foo(char* arr)
{
arr="attempt";
return arr;
}
【问题讨论】:
-
如果您声明
char arr[10];(10 个元素,编号为 0 到 9),则有效索引为0到9,而不是10。所以*(a + 9)有效,但*(a + 10)无效。 -
对不起,这是真的,我要编辑它。
-
如果您尝试使用 gcc 编译器编译您的第一个代码示例,您将收到以下错误 > 错误:赋值给数组类型的表达式,发生在第 8 行
example=foo(example);跨度> -
但是将字符串分配给 char (无论是 arr[0]、arr[9] 还是 arr[10]——它们都是数组的元素,而不是数组),不会有道理。您想改用 strcpy() 或 strncpy() 将字符串复制到数组:
strncpy(arr, "attempt", 10);. -
我知道这是可能的,但我想通过从函数返回地址来解决这个问题。
标签: c arrays function pointers char