我写了一个测试函数#include<stdio.h>main( ){ char a[100]; printf("Enter a string : "); gets(a); printf("The original string is : "); puts(a);}结果:输入:this is a test输出:this is a test #include<stdio.h>main( ){ char a[100]; int i; for (i=0;i<10;i++) a[i]='a'; printf("The original string is : "); puts(a);}运行结果是:输入:aaaaaaaaaa烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫等等乱码我想知道puts是个怎样的用法,这两种方法区别在哪里?还有关于这个烫我我见到好多,分析c语言编的exe文件时候,这个字很多?
字符串的末尾是有一个'\0'存在的,虽然不显示出来,像printf这样的函数,他们在打印字符串的时候会检测是否存在当前字符是否为'\0',为'\0'则退出打印。所以你在#include<stdio.h>main( ){char a[100];int i;for (i=0;i<10;i++)a[i]='a';//这一句的末尾没有添加结束符,即'\0'a[i+1]='\0';//这一句是我替你加的,你可以回去试试printf("The original string is : "); puts(a);} 还有你在使用gets函数接受字符串输入的时候,它在保存的时候其实自动的给你的字符串末尾添加了'\0';你可以使用打印数字的方法来查看譬如拿你的第一句#include<stdio.h>#include<string.h>int main( ){char a[100];printf("Enter a string : "); gets(a);for(int i=0;i<=strlen(a);i++)/*strlen是计算字符串长度的函数,不包括'\0'*/printf("%d\t",a[i]);/*逐字显示你输入各个字符的AscII码,最后一个是'\0','\0'的ascii码是0*/printf("\n");return 0;}
加这句memset(a,'\0',sizeof(a));就没有了,a你没有初始化对象,作为字符串格式打印时,当遇到'\0'才结束打印,所以后面90个字符全打成"烫烫..."了main( ) { char a[100]; int i; memset(a,'\0',sizeof(a));for (i=0;i<10;i++) a[i]='a'; printf("The original string is : "); puts(a); }