gpt4 book ai didi

c - c中如何检查传递的参数是否是字符串?

转载 作者:行者123 更新时间:2023-11-30 15:45:31 25 4
gpt4 key购买 nike

我有以下代码:

void test(int N)
{
printf("%d", N);

}
int main(int ac, char **av)
{
test("");
return 0;
}

我有一个需要整数参数的函数测试,但主要是当我调用该函数时,我给出一个字符串参数,c 将其转换为整数并为我打印。但我想要的是,如果有人传递一个字符串,我就会给出一个错误。如何检查参数是否是字符串?

谢谢!

最佳答案

void test(int N) { /* ... */ }

...

test("");

该函数调用根本无效。 test 需要一个 int 类型的参数,或者可以隐式转换为 int 的参数(任何算术类型都可以)。 "" 是字符串文字;在这种情况下,它会转换为 char* 值,该值指向 '\0' 字符,该字符是数组的第一个(也是最后一个,也是唯一的)字符。

没有从 char*int 的隐式转换。合格的编译器必须对无效调用发出诊断,并且它可能(恕我直言应该)彻底拒绝它。它与尝试对字符串文字求平方根或将 42 添加到结构中一样无效。

较旧版本的 C(1989 年 ANSI 标准之前)对于此类事情更加宽松,并且这种宽松性在某些现代编译器中仍然存在。如果您的编译器不拒绝调用,它很可能会获取字符串文字的地址并将其转换为 int。这种转换的结果在很大程度上是没有意义的;这样的编译器允许它确实不会给你带来任何好处。

如果您的编译器不拒绝调用,或者至少不发出警告,则应启用使其执行此操作所需的任何选项。例如,对于 gcc,您可以尝试以下操作:

gcc -std=c99 -pedantic -Wall -Wextra filename.c

如果您想使用特定于 gcc 的扩展,则可以删除 -pedantic-std= 选项有多个可能的参数。请参阅 gcc 文档以获取更多信息,或者查看您正在使用的任何编译器的文档。

如果您询问验证用户输入(即运行程序的人的输入而不是编写 C 代码),则用户输入通常不是数字形式。它采用文本(字符序列)的形式。例如,您可以使用 fgets() 函数从标准输入读取一行文本。然后,如果您愿意,您可以检查该行是否具有整数文字的形式。一种方法是使用 sscanf 函数。一个简单的例子:

#include <stdio.h>
int main(void) {
char line[200];
int n;

printf("Enter an integer: ");
fflush(stdout);
fgets(line, sizeof line, stdin);
if (sscanf(line, "%d", &n) == 1) {
printf("You entered %d (0x%x)\n", n, (unsigned)n);
}
else {
printf("You did not enter an integer\n");
}
}

但是,如果您的问题是关于某人编写 C 代码来调用您提供的函数,则编译器将检查所有参数的类型是否有效。

关于c - c中如何检查传递的参数是否是字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18971670/

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