-
str 只是指向字符串初始字符的地址,当您输入超过 2 个字符时,系统会将已经占用的空间分配给它,如果占用的存储空间不存储重要信息,也不会出现问题。
如果要输入无限的字符串,可以将上限设置为更大的限制,也可以使用动态分配存储空间的方法。
int limit;
char * str;
str=(char *)malloc((limit+1)*sizeof(char));
有一个 0 字符*
scanf("%s",str);
printf("%s",str);
-
字符末尾符号也占用 1 个字节。 '\0' zhan yi ge byte.
-
如果想要不受限制,可能要一次输入一个字符,这样比较实用,就是输入一个字符,就会被评判一次。
-
它没有限制,但超出限制是危险的。
例如,char* s="abcde"这相当于系统为您分配了 6 个字节的空间。
和 char s[6], char* s=(char *)malloc(6*sizeof(6))。
据说这些方法在 6 个字节内都是安全的。
输入字符串必须受到限制,只需将上限设置得更大即可。
-
malloc(n);
malloc 函数分配指定长度的内存块,如果分配成功,则返回指向已分配内存的第一个地址的指针,否则返回空指针。
调用此函数时,系统会自动查找可用的连续内存,并确保返回的指针地址在 n 字节后是空闲的。 但是 n 字节之后的内存也可能是空闲的。 这时越界是安全的,如果不闲着,程序可能会报错或其他错误,这取决于编译的软件,不同的编译软件有不同的结果。
输入字符串时,请将 n 设置为较大的大小,如果不想有限制,一次只能输入一个字符。
-
指针数组和数组指针是两个不同的概念,你在这里给出的定义实例实际上是指针数组的定义。
指针数组意味着所定义数组的每个元素都是对应数据类型的指针,可以使用循环语句进行打开空格的操作,例如:for char *p[10]; 是的。
for(i=0;i<10;i++)
p[i]=(char *)malloc(sizeof(char)*n);为每个指针请求 n 个字符的存储空间。
打开后,p的使用类似于二维数组的格式,可以有效使用两个下标,如p[0][0]='a';
你也可以分配一个字符串,如 p[2]="beijing";当然,字符串长度应小于 n。
另一方面,数组指针是定义为指向固定大小的顺序空间的指针,格式如下:
char (*pa)[10];定义一个指向具有 10 个元素的字符数组的指针,int (*p)[10];
应用格式可以参考以下步骤,在申请空格、赋值、输出后,可以观察到100赋值到第五行的第十个元素,指针可以像二维数组一样通过两个下标来指代请求的空间。
#include
main()}
前面的 l[i] 是一个 char 变量,而 new char[101] 是一个字符串空间,两个变量的类型不同,所以会产生错误。
如果它是一个静态数组,例如 char a[10],那么它会打开一个 10 个字符大小的连续空间,你可以合法地填充从 a[0] 到 a[9] 的 10 个空格,每个空间大小都是 char。 如果是动态数组,如果使用 realloc,则 realloc 原型为 extern void *realloc(void *mem address, unsigned int newsize); >>>More