#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输出就不会异常。