首页 文章

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

提问于
浏览
1

我知道指针是什么,但是当谈到字符串/数组时,我真的很困惑 . 如果某人有答案或网站解释它会很棒 . 例如:

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 name\n");
    name[] = getname();
    printf ("Hi %s", name);
    return (0);
}

2 回答

  • 0

    在你的getname函数内部,当你返回一个指向name数组的指针,因为它被分配在堆栈上,它会被破坏,留下一个无效的指针 . 取消引用这样的指针会导致许多问题 .

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

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

  • 1

    指针本身代表一个地址,例如如果你有一个类型为_1446006的指针,你可以随时用 printf("address of my pointer %p\n", pstr); 检查基础地址

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

    至于你的第二个问题,函数 getname 中的 name 是一个局部变量,它的生命周期在函数返回时结束 . 但是,您仍然希望在不合适的函数外访问 name . 您可以像在dasblinkenlight 's and others' post中那样解决这个动态分配的内存问题 .

    祝好运 .

相关问题