【发布时间】:2022-01-21 08:56:12
【问题描述】:
我想编写一个程序,当我在终端上写prog.exe -u word 时,会将word 转换为大写,否则跳过该过程。但是当我编译下面的代码时,屏幕上什么也没有,我无法弄清楚为什么会发生错误。
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
char u[] = "-u";
void upper(const char *src, char *dest);
int main(int argc, char const *argv[]) {
if (argc < 3) {
printf("Input at least 3 argument!\n");
} else
if (!(strcmp(argv[1], u))) {
char *output;
upper(argv[2], output);
printf("%s\n", output);
} else {
printf("No option\n");
}
return 0;
}
void upper(const char *src, char *dest) {
while (*src) {
if (*src >= 97 && *src <= 122) {
*dest = *src - 32;
} else {
*dest = *src;
}
src++;
dest++;
}
*dest = *src;
}
【问题讨论】:
-
char * output; upper(argv[2],output);你觉得这里发生了什么? -
永远不要使用像 97 或 122 这样的幻数。改用
*src >= 'a' && *src <= 'z'
标签: c initialization undefined-behavior c-strings argv