char *str_constant = "I point to a string literal";
char str_buf[] = "I am an array of char initialized with a string literal";
printf("string literal = %s\n", "I am a string literal");
printf("str_constant = %s\n", str_constant);
printf("str_buf = %s\n", str_buf);
scanf("%55s", str_buf);
char string[10] // here is a array of chars, they max length is 10;
char character; // just a char 1 letter/from the ascii map
character = 'a'; // assign 'a' to character
printf("character %c ",a); //we will display 'a' to stout
因此,string是一个字符数组,我们可以为每个内存空间分配多个字符
string[0]='h';
string[1]='e';
string[2]='l';
string[3]='l';
string[4]='o';
string[5]=(char) 0;//asigning the last element of the 'word' a mark so the string ends
这个赋值可以在初始化时完成,比如char word=“this is a word”//字符的word array现在得到这个字符串,并且是静态定义的 toy还可以为char数组赋值,并使用strcpy之类的函数对其赋值;
6条答案
按热度按时间qeeaahzv1#
对于
*printf
和*scanf
,%s
要求相应的参数为char *
类型,而对于scanf
,它最好指向可写缓冲区(即,不是字符串文字)。在
scanf
中使用没有explicit字段宽度的%s
,会造成与gets
相同的缓冲区溢出漏洞;也就是说,如果输入流中的字符比目标缓冲区所能容纳的字符多,scanf
会很乐意地将这些额外的字符写入缓冲区之外的内存中,这可能会破坏一些重要的内容。不幸的是,与printf
不同,您不能为该字段提供作为运行时参数:一个选项是动态生成格式字符串:
编辑
将
scanf
与%s
转换说明符一起使用将在第一个空白字符处停止扫描;例如,如果输入流看起来像那么
scanf("%55s", str_buf)
将读取"This"
并将其赋值给str_buf
。注意,在这种情况下,带有说明符的字段没有什么区别。xxhby3vn2#
现在开始:
wsxa1bj13#
%s将获取所有值,直到它为NULL,即“\0”。
将给予
这就是结局
将给予
这是
tez616oj4#
bprjcwpo5#
%s是字符数组的表示
因此,string是一个字符数组,我们可以为每个内存空间分配多个字符
这个赋值可以在初始化时完成,比如char word=“this is a word”//字符的word array现在得到这个字符串,并且是静态定义的
toy还可以为char数组赋值,并使用strcpy之类的函数对其赋值;
这将执行与示例相同的操作,并自动在末尾添加(char)0
所以如果你用%S printf(“my string %s”,string)打印它;
我们可以只显示它的一部分
tf7tbtn26#