#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输出就不会异常。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。