gpt4 book ai didi

c - 使用 C 将 char * 传递给 fopen

转载 作者:太空宇宙 更新时间:2023-11-04 00:33:34 24 4
gpt4 key购买 nike

我正在编写一个将数据从文件传递到数组的程序,但我在使用 fopen () 时遇到了问题。当我将文件路径硬编码到参数中时它似乎工作正常(例如 fopen ("data/1.dat", "r");)但是当我将它作为指针传递时,它返回空值。

请注意,如果从命令行输入,第 142 行将打印“data/1.dat”,因此 parse_args () 似乎可以正常工作。

132 int
133 main(int argc, char **argv)
134 {
135 FILE *in_file;
136 int *nextItem = (int *) malloc (sizeof (int));
137 set_t *dictionary;
138
139 /* Parse Arguments */
140 clo_t *iopts = parse_args(argc, argv);
141
142 printf ("INPUT FILE: %s.\n", iopts->input_file); /* This prints correct path */
143 /* Initialise dictionary */
144 dictionary = set_create (SET_INITAL_SIZE);
145
146 /* Use fscanf to read all data values into new set_t */
147 if ((in_file = fopen (iopts->input_file, "r")) == NULL)
148 {
149 printf ("File not found...\n");
150 return 0;
151 }

谢谢!里斯

更多:如果我在运行 set_create() (ln 144) 后尝试打印字符串,则不会打印该字符串。 (但是函数中根本没有任何对字符串的引用...)

 47 set_t *
48 set_create(int size)
49 {
50 set_t *set;
51
52 /* set set_t members */
53 set->items = 0;
54 set->n_max = size;
55 set->lock = FALSE;
56
57 /* allocate memory for dictionary input */
58 set->data = (int *) malloc (size * sizeof (int));
59
60 return set;
61 }

如果我在 fopen() 之后调用这个函数,它确实有效。我看不出这对文件名有何影响...

再次感谢。

最佳答案

您的新代码表明您正在写入无效内存。 set 是一个指针,但您从未对其进行初始化。您正在覆盖一些随机内存,从而破坏指向您传递给 fopen() 的字符串的指针。

关于c - 使用 C 将 char * 传递给 fopen,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2474707/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com