当我尝试在命令行上将数字传递到我的应用程序时,以下代码出现奇怪的段错误。
int offset = 3;
int main(int argc, char *argv[]) {
// Check for arguments to see whether there is a custom offset
if (argc == 2) {
// If argc == 2 then we have a offset?
if (isdigit((unsigned char)*argv[1])) {
offset = atoi(*argv[1]);
printf("Offset changed to: %d\n", offset);
} else {
printf("Offset not changed due to %s not being a number.\n", *argv[1]);
}
} else if(argc >= 2) {
// If argc >= 2 then we have too many arguments
printf("Too many arguments.");
return 0;
}
}
最佳答案
您的代码的真正问题是您试图调用您未声明的函数(您必须使用 C89/90 编译器)。你打电话isdigit
.你打电话printf
.你打电话atoi
.您错误地调用了后两者。编译器无法通知您这些函数被错误调用的唯一原因是您忘记声明它们。
包括<ctype.h>
, <stdlib.h>
和 <stdio.h>
在源文件的开头,以便编译器知道 atoi
的正确参数类型和其他功能。一旦你这样做了,你应该能够找出 atoi
的问题。 ,因为编译器会发出解释问题的诊断消息。然后您可以相应地更改调用。一些编译器将能够检测到 printf
的问题。也打电话。
请注意,即使您更改了 atoi
和 printf
按照其他答案中的建议调用(即 atoi(argv[1])
等),您的代码仍然无效,因为在 C89/90 中调用 printf
不先声明它会导致未定义的行为(在 C99 中,调用任何函数而不先声明它是完全非法的)。
关于c - isdigit() 段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3950846/