我有这个功能:
int scan_arguments(int *words_count, char ***words, char **file)
{
/* If the first argument is equal to "/f" copy the second argument in the file variable */
if (*words_count > 2 && !strncmp(*words[0], "/f", 2)) {
if(!(file = malloc(strlen(*words[1]) + 1))) {
printf("Allocation error");
return 1;
}
strcpy(*file, *words[1]);
words += 2;
words_count -= 2;
}
我从我的主要功能中这样称呼它:
int main(int argc, char **argv)
{
char *file = "", **words;
int words_count;
/* Copy the arguments and discard the program name */
words = argv + 1;
words_count = argc - 1;
scan_arguments(&words_count, &words, &file);
}
我的功能的目的是检查第一个参数是" / f"如果是,则将第二个参数存储在文件字符串中。
问题是当执行到达strlen(* words [1])部分时,程序停止工作,从调试器我得到"地址越界"。我无法理解问题是什么,因为* words [0]得到了正确的评估。
很抱歉,如果这可能是一个简单的问题,但这是我的第一个带指针的严肃计划,我仍然有一些困难。
感谢您的帮助!
修改
感谢@BLUEPIXY和@CoolGuy我改变了我的功能:
/* If the first argument is equal to "/f" copy the second argument in the file variable */
if (*words_count > 2 && !strncmp((*words)[0], "/f", 2)) {
if(!(*file = malloc(strlen((*words)[1]) + 1))) {
printf("Allocation error");
return 1;
}
strcpy(*file, (*words)[1]);
*words += 2;
*words_count -= 2;
}
它现在完美无缺。谢谢!