我的代码的目标是接受 2 个命令行参数(包括程序名称),并根据给定的第二个命令行参数打印出所示的响应。如果命令行参数是一个整数,则用户的输入被接受或“成功”,如果它是其他任何内容(例如字符串或多个命令行参数),则它将为 Null 并显示错误消息。这是针对熟悉 CS50 凯撒的人
我的代码如下:
#include <stdio.h>
#include <cs50.h>
#include <string.h>
#include <ctype.h>
int main(int argc,string argv[])
{
char *x = argv[1];
if (argc == 2 && isdigit(x))
{
printf("Success\n");
}
else
{
printf("Usage: ./caesar key\n");
}
}
代码可以编译,但出现分段错误。我知道分段错误是程序试图访问数组分配的内存之外的内容(如果我错了,请纠正我),但我确实指定了 argv[1]。
The isdigit
作为参数,一个int
,其中包含作为无符号字符的字符代码。
很遗憾isdigit
通常作为宏实现,并且以这样的方式编写:如果您传递了错误类型的数据,则不会收到警告。你正在传递一个pointer到一个字符,该字符不是单个字符。第一个命令行参数的第一个字符是x[0]
。然而这must被转换为unsigned char
.
因此这些都是错误的
你可以用什么来检查第一个字符第一个参数的数字是
isdigit((unsigned char)x[0]))
但到底你什么want不是检查其中是否有数字,而是将字符串转换为整数,并查看是否发生错误 -use strto(u)l for x看看是否成功 https://stackoverflow.com/a/14176593/918959;然后检查结果值的范围。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)