同样的代码运行结果不同

x1290215357 2017-12-02 06:10:15
这个程序是求最大单词和最小单词,单词字母为4个的时候停止输入
#include<stdio.h>
#include<string.h>

#pragma warning (disable:4996)

#define MAX_WORDS 20

char* smallest_word(char[],char[]);
char* largest_word(char[],char[]);

int main()
{
char word[20],word_max[20],word_min[20];
for (;;) {
printf("Enter a word:");
gets(word);
if (strlen(word) == 4)
break;
strcpy(word_min,smallest_word(word,word_min));
strcpy(word_max,largest_word(word,word_max));
}
printf("Smallest word: %s\n", word_min);
printf("Largest word: %s\n", word_max);
getchar();
getchar();
return 0;
}

char* smallest_word(char word[],char word_min[])
{
if (strcmp(word, word_min) <= 0)
strcpy(word_min, word);
return word_min;
}

char* largest_word(char word[],char word_max[])
{
if (strcmp(word, word_max) >= 0)
strcpy(word_max, word);
return word_max;
}

同样的代码,在Cfree上运行的结果是

在VS上运行的结果是
...全文
418 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
paschen 2017-12-03
  • 打赏
  • 举报
回复
执行时,strcpy(word_max,largest_word(word,word_max));,word_max还未初始化,函数中就直接用strcmp进行比较,是未定义行为
自信男孩 2017-12-02
  • 打赏
  • 举报
回复
#include<stdio.h>
#include<string.h>

#pragma warning (disable:4996)

#define MAX_WORDS 20

char* smallest_word(char[],char[]);
char* largest_word(char[],char[]);

int main()
{
    char word[20],word_max[20] = {0}, word_min[20] = {0};
    for (;;) {
        printf("Enter a word:");
        gets(word);
        if (strlen(word_min) == 0)
            strcpy(word_min, word);


        if (strlen(word) == 4)
            break;
        strcpy(word_min,smallest_word(word,word_min));
        strcpy(word_max,largest_word(word,word_max));
    }
    printf("Smallest word: %s\n", word_min);
    printf("Largest word: %s\n", word_max);
    getchar();
    getchar();
    return 0;
}

char* smallest_word(char word[],char word_min[])
{
    if (strcmp(word, word_min) <= 0)
        strcpy(word_min, word);
    return word_min;
}

char* largest_word(char word[],char word_max[])
{
    if (strcmp(word, word_max) >= 0)
        strcpy(word_max, word);
    return word_max;
}
首先word_min和word_word数组里的元素都是随机字符,不是字符串,那么怎么可以调用strcmp比较呢。比较的两个参数都需要是字符串,那么这两个并不是字符串; 所以,一个可以,一个不可以这只能说明随机字符得到随机的结果; 如果只是初始化word_min,word_max为空串还是不行的,因为word_min空串和任意串相比较都是最小的。所以,还需要将word_min初始化,那么把输入的第一个字符串赋值给word_min是可以的。

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧