#include"stdio.h"
#include "stdlib.h"
int main(void)
{
int width;
int i;
int j;
char *word;
char m;
scanf("%d\n",&width);
word=(char*)malloc(width*sizeof(char));
for(i=0;i<width;i++){
scanf("%c",&word[i]);
}
m=word[0];
j=0;
for(i=0;i<width;i++)
{
if(word[i]>m){
m=word[i];
j=i;
}
}
for(i=0;i<width;i++){
printf("%c",word[i]);
if(i==j){
printf("(max)");
}
}
当我输入“3(另起一行) abc”时结果为abc(max)。而当我令a[5]="(abc)"并将printf("(max)")换为puts(a)时,为什么输出为abc(max)c?谢谢回答。
不用细看代码就知道。字符串以'\0'结尾,你5个字符,分配的大小是长度为5的char数组吧?
所以不是puts、printf的问题,是你放字符串的数组中没有NULL!所以它就继续打印出栈中的其它局部变量的值,直到遇到NULL。
你代码中没有char a[5]的声明,我猜顺序也刚好在char m
前面。
char a[6]="(max)"
或为什么不直接写 char *a="(max)"
?
还有,Linux仔仔们可能玩不出楼主这种效果来。不知道楼主用的什么编译器。
因为GCC能检查出这类字符串分配空间的问题,启用stack protector,在char a[5]
后面放个canary,这个值最低位字节通常是NULL,所以保证了字符串以NULL结尾,puts输出就不会异常。
参考: http://.com/q/1010000000432116#a-1020000000432240