代码编译并运行得很好,除非我只指定一个命令行选项,那么它就是段错误。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
void printHelp()
{
printf("Usage: fstring [ char ] [ amount ] Optional:[ outfile ]\n"
"Example: fstring A 100 out.txt\n");
exit(1);
}
char *f_string(const char *s, int t)
{
int i; char *dst = malloc(t * strlen(s) + 1);
for(i = 0; i < t; i++) {
strcat(dst, s);
}
return dst;
}
int main(int argc, char *argv[])
{
if(argc < 2) {
printf("You need at least two arguments!\n");
return 1;
}
char *res = f_string(argv[1], atoi(argv[2]));
puts(res);
free(res);
return 0;
}
正如我所说,如果我给它两个参数,它会运行,如果我没有给它打印错误信息,但只给它一个会导致段错误。我不明白为什么。
答案 0 :(得分:7)
由于argc
包含传递给程序的参数数量增加1,因此测试需要为if (argc < 3)
。
(argc
是argv
数组的长度,其中包含程序名称argv[0]
。一个有用的助记符是argv[argc]
始终为NULL。)
答案 1 :(得分:3)
argc - 参数计数
argv - arg的值
更改:强>
if(argc < 2) {
要强>
if(argc < 3) {
在此处阅读有关命令行参数的更多信息: