为什么字符串有指针,因为那里有返回类型



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

char * strncopy (char*dest, char * source, size_t);

为什么是指针?它指向什么? 它通常是一个指针存储地址吗?

在我的教科书中说,每个字符串构建函数的类型都是指针 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 namen");
    name[] = getname();
    printf ("Hi %s", name);
    return (0);
}

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

您应该使用 malloc/calloc 在堆上的 getname 内分配名称数组,以便在返回指针时不会销毁数据。

对于像strncpy

这样的函数,它们倾向于返回指向结果字符串的指针;例如:strncpy返回指向目标的指针。

指针本身表示一个地址,例如,如果你有一个指针类型char *pstr,你总是可以用printf("address of my pointer %pn", pstr);检查底层地址

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

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

祝你好运。

相关内容

最新更新