我已经构建了一个C应用程序,当我构建它时,它没有显示错误,但是当我运行它时,它给出了错误“Segmentation Fault:11”。 如果它有帮助,这是我正在使用的代码:
#include <stdio.h>
int main(char *argv[]) {
printf("The project path is: ./Projects/%c", argv[1]);
return 0;
}
答案 0 :(得分:3)
正确的main
原型语法是
int main(int argc, char *argv[]) { ... }
%c
中的printf
转换规范也打印一个字符,打印字符串时使用%s
。
答案 1 :(得分:1)
你有很多问题:
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;
}
答案 2 :(得分:0)
int main(int, char*[]);
argv[1]
超出范围答案 3 :(得分:0)
首先,将您的主要内容更改为:
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)
的内容。
尽管如此,您通常希望在使用argc
之前检查argv
的值。在这种情况下,你可以逃脱它,但只是偶然或多或少。尝试以相同的方式使用argv[2]
可能会产生未定义的行为。
答案 4 :(得分:0)
除了其他建议之外,您可能还需要重新访问printf格式。 %c
用于打印单个字符,argv[1]
为char *
。使用argv[1][0]
或其他类似内容,或使用字符串格式说明符%s
。