#include <stdio.h>
#include <string.h>
int main()
{
char s[10];
int len = sizeof(s)/sizeof(s[0]);
int i;
printf("请输入你的字符串: ");
scanf("%s",&s);
for(i = 0; i < len; i++)
{
printf("s[%d]=%c\n",i,s[i]);
}
}
问题描述:
定义了一个字符型数组,通过scanf输入字符后再通过for循环打印出来,但打印出来的第8个数组元素显示出一个方框。如果printf里使用%d输出,有时候显示的是数字1,ascii码对应的是SOH(start of headline),标题开始。有时候显示的是48,意思是字符0。
请问大家这是什么原因导致的呢?
这是因为你定义了一个数组char s[10];该字符型数组的长度为10个字节,但该自字符型数组未进行初始化,因此10个字节的数组的值是未知的。
scanf("%s",&s);
使用以上命令,由于只输入了5个字符,因此s[0]s[4]的值分别是字符‘a’,‘p’,‘p’,‘l’,‘e’,而s[5]s[9]的值依旧没有赋值,因此s[5]~s[9]的值依旧是未知的。
所以你打印出来,后面的值就是不确定的值了。
int len = sizeof(s)/sizeof(s[0]); 的结果肯定是10啊,但你实际输入的字符串长度哪有10啊?apple才5个字符。字符串长度用strlen(s)获得
改成
for(i = 0; i < strlen(s); i++)