C语言基础 -29 数组_字符数组之定义/初始化

1 单引号实现字符赋值

book@100ask:~/C_coding/CH01$ cat char.c
#include<stdio.h>
#include<stdlib.h>

#define N 3

int main()
{
	char str[N] = {'a','b','c'};
	int i;

	for(i = 0; i < N; i++)
		printf("%c ",str[i]);
	printf("\n");
	exit(0);
}

book@100ask:~/C_coding/CH01$ make char
cc     char.c   -o char
book@100ask:~/C_coding/CH01$ ./char
a b c 

2 双引号实现字符串赋值。注意:字符串赋值,其存储空间除了字符串本身外,还包括一个尾零的空间

book@100ask:~/C_coding/CH01$ cat char.c
#include<stdio.h>
#include<stdlib.h>

#define N 3

int main()
{
	char str[N] = "a";
	int i;

	for(i = 0; i < N; i++)
		printf("%c ",str[i]);
	printf("\n");
	exit(0);
}

book@100ask:~/C_coding/CH01$ make char
cc     char.c   -o char
book@100ask:~/C_coding/CH01$ ./char
a   

book@100ask:~/C_coding/CH01$ cat char.c
#include<stdio.h>
#include<stdlib.h>

#define N 3

int main()
{
	char str[N];
	int i;

	gets(str);
	puts(str);
	/*
	for(i = 0; i < N; i++)
		printf("%c ",str[i]);
	printf("\n");
	exit(0); 
	*/
}


book@100ask:~/C_coding/CH01$ make char
cc     char.c   -o char
char.c: In function ‘main’:
char.c:11:2: warning: implicit declaration of function ‘gets’; did you mean ‘fgets’? [-Wimplicit-function-declaration]
  gets(str);
  ^~~~
  fgets
/tmp/cc3Tg7tU.o: In function `main':
char.c:(.text+0x24): warning: the `gets' function is dangerous and should not be used.
book@100ask:~/C_coding/CH01$ ./char
abcddsdadad
abcddsdadad
*** stack smashing detected ***: <unknown> terminated
Aborted (core dumped)
book@100ask:~/C_coding/CH01$ ./char
abdc
abdc
*** stack smashing detected ***: <unknown> terminated
Aborted (core dumped)

book@100ask:~/C_coding/CH01$ ./char
ab
ab
book@100ask:~/C_coding/CH01$ ./char
a
a
book@100ask:~/C_coding/CH01$ ./char
abc
abc
book@100ask:~/C_coding/CH01$ ./char
abcd
abcd
*** stack smashing detected ***: <unknown> terminated
Aborted (core dumped)

编译时提示,属于gets很危险,因为它不会检查边界,即即使字符数组定义范围为3个,当输入多余3个字符时,仍然可以执行,即边界失效。

猜你喜欢

转载自blog.csdn.net/f2157120/article/details/106772958