Pointers 为什么字符串有指针作为返回类型?

Pointers 为什么字符串有指针作为返回类型?,pointers,Pointers,我知道指针是什么,但当涉及到字符串/数组时,我真的很困惑。如果有人有一个答案或一个解释它的网站,那就太好了。例如: char * strncopy (char*dest, char * source, size_t); 为什么是指针?它指的是什么?它通常是指针存储地址吗 我的教科书中说,每个字符串构建函数都是pointer char*类型 我还试着看看我是否能写一个程序来解决问题,但没有成功。有人能告诉我怎么修吗,或者我做错了什么 #include <stdio.h> #inclu

我知道指针是什么,但当涉及到字符串/数组时,我真的很困惑。如果有人有一个答案或一个解释它的网站,那就太好了。例如:

char * strncopy (char*dest, char * source, size_t);
为什么是指针?它指的是什么?它通常是指针存储地址吗

我的教科书中说,每个字符串构建函数都是pointer char*类型

我还试着看看我是否能写一个程序来解决问题,但没有成功。有人能告诉我怎么修吗,或者我做错了什么

#include <stdio.h>
#include <string.h>    

char * getname ()
{
    char name [10];
    scanf ("%s", name);
    return (name);
}    

int main (void)
{
    char name[10];
    printf ("Enter your name\n");
    name[] = getname();
    printf ("Hi %s", name);
    return (0);
}
#包括
#包括
char*getname()
{
字符名[10];
scanf(“%s”,名称);
报税表(姓名);
}    
内部主(空)
{
字符名[10];
printf(“输入您的姓名”);
name[]=getname();
printf(“高%s”,名称);
返回(0);
}

在getname函数内部,当您返回指向name数组的指针时,因为它是在堆栈上分配的,它将被销毁,留下一个无效的指针。取消引用这样的指针会导致很多很多问题

您应该使用malloc/calloc在堆上的getname内部分配name数组,以便在返回指针时不会破坏数据


对于strncpy之类的函数,它们倾向于返回指向结果字符串的指针;e、 g.:strncpy返回一个指向目标的指针。

在getname函数内部,当返回指向名称数组的指针时,因为它是在堆栈上分配的,所以会被销毁,留下一个无效指针。取消引用这样的指针会导致很多很多问题

您应该使用malloc/calloc在堆上的getname内部分配name数组,以便在返回指针时不会破坏数据


对于strncpy之类的函数,它们倾向于返回指向结果字符串的指针;e、 例如:strncpy返回一个指向目标的指针。

指针本身表示一个地址,例如,如果您键入了一个指针
char*pstr
,您可以始终使用
printf(“我的指针的地址%p\n”,pstr)”)检查基础地址

在C编程语言中,字符串是字符的数组。如果您对数组及其内存布局有很好的了解,那么理解c样式的字符串并不难。一般来说,C中的数组是一个连续的内存块,数组名表示数组中第一个元素的地址。字符串也是如此,它是一个名为第一个字符的
char
数组地址的内存块。此外,c样式的字符串以字符
\0
结尾,因此如果您想自己管理字符串的内存,请为尾部
\0
多记住一个字节

至于第二个问题,函数
getname
中的
name
是一个局部变量,其生命周期在函数返回时结束。但是,您仍然希望在函数之外访问
name
,这是不合适的。你可以通过动态分配内存来解决这个问题,就像dasblinkenlight和其他人的文章一样


祝您好运。

指针本身代表一个地址,例如,如果您键入了一个指针
char*pstr
,您可以始终使用
printf(“我的指针的地址%p\n”,pstr)检查基础地址

在C编程语言中,字符串是字符的数组。如果您对数组及其内存布局有很好的了解,那么理解c样式的字符串并不难。一般来说,C中的数组是一个连续的内存块,数组名表示数组中第一个元素的地址。字符串也是如此,它是一个名为第一个字符的
char
数组地址的内存块。此外,c样式的字符串以字符
\0
结尾,因此如果您想自己管理字符串的内存,请为尾部
\0
多记住一个字节

至于第二个问题,函数
getname
中的
name
是一个局部变量,其生命周期在函数返回时结束。但是,您仍然希望在函数之外访问
name
,这是不合适的。你可以通过动态分配内存来解决这个问题,就像dasblinkenlight和其他人的文章一样


祝你好运。

将来参考:如果你在谷歌中键入“man strncpy”,它会立即将你发送到一个回答你问题的网站。将来参考:如果你在谷歌中键入“man strncpy”,它会立即将你发送到一个回答你问题的网站。