C语言%s输出错误

为什么这样输出字符数组 有的时候能输出成功,有的时候输出后面带几个垃圾字符?

第1个回答  2013-05-13
因为你的字符数组空间没有用完啊,你可以在while语句执行完后加上a[i]='\0';就行了!这样就成字符串了。你要分清楚字符数组和字符串的区别!追问

但是为什么有的时候能输出正确?不初始化应该是100个垃圾值,为什么有的时候输出正确有的时候有一个垃圾值,有的时候几个垃圾值?不是每次都输出100个值么?

追答

那些你所谓的垃圾值是剩余空间的随机数,是不确定的!!正确的时候估计是你输入100个数了吧!

第2个回答  2013-05-13
你的char a[100]没有初始化,将char a[100]修改为char a[100] = {0};就行了追问

不初始化应该是100个垃圾值,为什么有的时候输出正确有的时候有一个垃圾值,有的时候几个垃圾值?

追答

末初始化时,不知道里面实际是什么,所以也就不知道是一个,两个或者是多个,不过你的程序当输入超过100时,就会产生溢出,此时程序就会挂掉,所以你要小心

第3个回答  2013-05-13
没有加'\0'这样写就应该没事了

#include <stdio.h>
int main(int argc, char **argv)
{
int i = 0;
char a[100];
while ((a[i] = getchar()) != '\n') {
i++;
}
a[i] = '\0';
printf("%s", a);

return 0;
}

还有这个程序可能会缓冲区溢出,改用动态分配会好些!本回答被提问者和网友采纳
第4个回答  2013-05-13
数组a没有初始化啊

C语言%s输出错误
因为你的字符数组空间没有用完啊,你可以在while语句执行完后加上a[i]='\\0';就行了!这样就成字符串了。你要分清楚字符数组和字符串的区别!

C语言,一维字符数组用%s输出为什么会出错?必须定义长度ch[5]才可以...
C语言,一维字符数组用%s输出必须要有字符串的串尾符才不会出错。不是必须定义长度ch[5]才可以的。以下几种方法定义也都是可以的:char ch[]={'f','f','f','\\0'};printf("%s",ch);=== char ch[]={"fff"};printf("%s",ch);=== char ch[4]={'f','f','f'};printf("%s"...

c语言 输出字符串用%s为什么不对 怎么用%s输出呢?
include<string.h> int main(){ char s[100],c;int i,j;gets(s);for(i=0,j=strlen(s)-1; i<j; i++,j--){ c=s[i];s[i]=s[j];s[j]=c;} printf("%s\\n",s);return 0;}

c语言中%s输出字符串的问题
include<stdio.h> void main(){ printf("%s", "55" ); \/\/当你在输出%s时,后面的数据不能是整型数据,一旦用整型数据就会出现你的情况!原因:%s意思是输出一个字符串,后面对应的数据应该是字符串存放的地址值,而55不是一个有效的地址,因此。。。其他是你点调试之后显示的VC\/VS的调...

C语言printf("%s",a);输出数组后面有乱码,为什么?
那可能是你的数组没有初始化吧,前面你赋值了,但是后面是随机值,打印出来就是乱码

C语言中用%s输出数组遇到的问题
include <stdio.h> int main(void){ int i = 0;char a[20]=" "; \/\/在这里,给a附空值,否则,后面的数组a如果没有被赋值,系统会随机赋值 while((a[i++]=getchar())!='\\n');printf("%s\\n",a);return 0;}

C语言printf函数中,%C和%s都可以输出字符串?
这句话是不对的,因为%c只能够输出单个字符,%s表示的是输出字符串,所以说这句话是错误的。printf()函数是式样化输出函数, 一般用于向准则输出设备按规定式样输出消息。正在编写步骤时经常会用到此函数。printf()函数的挪用式样为:printf(“<式样化字符串>”,<参数表>);。其中式样化字符串包括两...

为什么c语言中char*s;scanf("%s",s)是错的??
char *s 是一个指针,scanf("%s",s); 这是给字符串变量赋值的语句,你指针没有被初始化,你运行时它会随机指向一块内存空间。建议你以后定义指针时立即初始化下,为char *s = NULL; 否则会造成野指针的现象。再声明定义个字符串 char a[100]; s = a;再用scanf("%s",s);这样就...

C语言中,printf("%s.%s", s1,s2); 这样写,为什么输出在屏幕上·变成了...
可能字符串中有这个符号,或者是没有在结尾加"\\0"

C语言 char *p="abcde"; printf("%s",p);正确;;;char *p="abcde"; pr...
语句printf("%s",*p);会出错,因为%s表示输出字符串,而*p则是指向的字符串的第一个字符,请改成printf("%c",*p);则输出a,改成printf("%d",*p);则输出97,原因分析:char *p="abcde",则字符指针p指向字符串,p的值就是字符串首字符的地址,*p就是第一个字符。

相似回答