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