运行时出现C应用程序错误
我已经构建了一个C应用程序,当我构建它时,它没有显示任何错误,但是当我运行它时,它给了我错误“Segmentation Fault:11”。 如果有帮助,这里是我使用的代码:运行时出现C应用程序错误
#include <stdio.h>
int main(char *argv[]) {
printf("The project path is: ./Projects/%c", argv[1]);
return 0;
}
你有许多问题:
- 为
main
的签名是参数的数量,接着为C字符串数组。 - 在使用数组之前,您应该始终检查计数。
- 该数组是字符串,因此您需要
%s
来打印它们。
这应该工作:
#include <stdio.h>
int main(int argc, char *argv[]) {
if (argc < 2)
fprintf (stderr, "Wrong number of arguments\n");
else
printf ("The project path is: ./Projects/%s\n", argv[1]);
return 0;
}
正确main
原型语法
int main(int argc, char *argv[]) { ... }
而且%c
转换说明在printf
打印字符,打印字符串中使用%s
。
- 更改签名
int main(int, char*[]);
- 参数是你传递给过程是什么?如果你不传递任何
argv[1]
超出范围
我传递1个参数的方案,这是该项目的名称。但是,当我使用argv [1] – Matthew 2012-04-10 09:44:30
首先,改变你的主要以:
int main(int argc, char *argv[])
其次,你有你传递给printf的东西之间的不匹配,和你已经告诉你,你会通过。 argv[1]
是一个指针到字符,而不是一个字符。你需要/想使用%s转换将其打印出来:
printf("The project path is: ./Projects/%s", argv[1]);
在这种特定的情况下,它不是真正的强制性检查足够的参数,因为即使你不传递任何命令行参数, argv
将至少包含argv[0]
后跟空指针。因此,使用argv[1]
是安全的,但是如果您未通过命令行参数,则可能会打印为类似(null)
的内容。
尽管如此,在使用argv
之前,您通常需要检查argc
的值。在这种情况下,你可以避开它,但只是或多或少偶然发生。试图以相同的方式使用argv[2]
可能会导致未定义的行为。
除了其他建议,您可能需要重新访问您的printf格式。 %c
用于打印单个字符,并且argv[1]
是char *
。请使用argv[1][0]
或其他类型,或使用字符串格式说明符%s
。
时,它仍然没有打印输入的字符串。我正在处理所有的响应,并且我确保尝试每个人,但是我没有发现我打算使用%s而不是printf上的%c,从现在开始,我会记得检查是否有足够的命令行参数。谢谢 :) – Matthew 2012-04-10 09:49:34