gpt4 book ai didi

c - C 代码中终端的错误输出(使用 argc)

转载 作者:行者123 更新时间:2023-11-30 19:01:26 24 4
gpt4 key购买 nike

我在以下 C 代码中遇到问题:

#include <stdio.h>
#include <stdlib.h>

int main (int argc, char *argv [])
{
char max;
char *max_ptr = &max;
*max_ptr = 3;

char *tmp = (argc > 1)? argv[1]: max_ptr;
int w = atoi(tmp);
printf("%i",w);

return 0;
}

我想要做的是:如果有 1 个参数 (argc > 1),则该参数将打印在终端中。如果没有参数 (argc = 1),则要打印的值为“3”。

当我编写参数时,程序会打印它们。但是,当我不写参数时,输出为“0”。

谁能解释一下为什么?我是 C 和指针的新手,所以请耐心等待。

最佳答案

您正在为 max 分配值 3(单个字符的整数表示),而不是 '3'(单个字符)或 "3"(以 null 结尾的字符串)。

对此值调用 atoi 会导致未定义的行为,因为您传递给它的 char* 实际上并未按要求指向以 null 结尾的字符串。

未定义的行为意味着任何事情都可能发生,例如它可以打印 0

你确实让事情变得比需要的更复杂:

const char *tmp = (argc > 1) ? argv[1] : "3";

请注意双引号,使其成为(以 null 结尾的)字符串文字,而不是单个字 rune 字。

关于c - C 代码中终端的错误输出(使用 argc),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57834646/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com