【发布时间】:2020-07-04 11:44:35
【问题描述】:
这是我目前的代码:
#include <stdio.h>
#include <string.h>
#define WORD_LEN 20
int main(int argc, char *argv[]) {
int i;
char smallest_word[WORD_LEN + 1],
largest_word[WORD_LEN + 1],
current_word[WORD_LEN + 1];
current_word == argv[1];
strcpy(smallest_word, (strcpy(largest_word, current_word)));
for (i=2; i<argc; i++) {
current_word == argv[i];
if (strcmp(current_word, smallest_word) < 0) {
strcpy(smallest_word, current_word);
}
else if (strcmp(current_word, largest_word) > 0) {
strcpy(largest_word, current_word);
}
}
printf("\nSmallest word: %s", smallest_word);
printf("\nLargest word: %s", largest_word);
return 0;
}
这个程序的重点是从命令行获取参数(单词)并比较它们以查看哪个是最小的和最大的(AKA 字母顺序)。我觉得我的程序已经关闭并且它应该可以工作,但是当我尝试运行代码时,输出是奇怪的波浪状字符。如果我的输入如下,那么输出将是:
输入:
./whatever.exe hello there general kenobi
输出:
Smallest word: ▒
Largest word: ▒
而正确的输入输出应该如下:
输入:
./whatever.exe hello there general kenobi
输出:
Smallest word: general
Largest word: there
我不确定这是类型问题,还是我的程序完全有问题。我期待任何和所有的反馈
【问题讨论】:
-
current_word == argv[1];什么都不做 - 比较被丢弃的指针。我怀疑你想让strcpy(current_word, argv[1]);复制"hello"。节省时间,启用所有编译器警告。 -
@chux-ReinstateMonica 就是这样!非常感谢!
-
C11 Standard - 6.3.2.1 Other Operands - Lvalues, arrays, and function designators(p3) "...类型为 "array of type" 的表达式被转换为类型为 "pointer to type"的表达式> 指向数组对象的初始元素并且不是左值。"
标签: c string pointers char command-line-arguments