2016-10-25 3 views
-2

не пишу этот код:fprintf ничего

105 void draw_detections(char * image_file_name, image im, int num, float thresh, box *boxes, float **probs, char **names, image *labels, int classes) 
106 { 
107  int i; 
108  FILE * fptr; 
109  char filename[100]; 
110  strcpy(filename,"output/"); 
111  strcpy(filename,image_file_name); 
112  strcpy(filename, ".txt"); 
113  printf(filename); 
115  fptr = fopen (filename, "wb"); 
116  printf(fptr); 
118  if (fptr == NULL) { 
119   fprintf(stderr, "Can't open input file in.list!\n"); 
120   exit(1); 
122  } 
123  for(i = 0; i < num; ++i){ 
124   int class = max_index(probs[i], classes); 
125   float prob = probs[i][class]; 
126   if(prob > thresh){ 
127    //int width = pow(prob, 1./2.)*30+1; 
128    int width = 8; 
129    printf("%s: %.0f%%\n", names[class], prob*100); 
130    fprintf(fptr, "%s,%.0f%%\n", names[class], prob*100); 

Полный код можно найти здесь: https://gist.github.com/eba1a5a6373b688b1b5d36624c897b90 fptr не равно нулю, однако ни один файл не будет создаваться. Как я могу это исправить?

$ ls output/ 

ничего не возвращает! Примечание: эта строка печатается на стандартный вывод правильно:

129    printf("%s: %.0f%%\n", names[class], prob*100); 
+1

Я думаю, что у вас есть '.txt' файл ... –

+0

посмотрите на' strcpy' определения функции –

+0

имя файла почти распечатана правильно кроме того, он пропускает вывод/с начала имени файла, однако он даже не создает файлы в текущем каталоге –

ответ

2

Эти строки:

110  strcpy(filename,"output/"); 
111  strcpy(filename,image_file_name); 
112  strcpy(filename, ".txt"); 

делает не производить строку как output/some_name.txt

перезаписывает Каждый strcpy вызов, что уже в строка назначения.

Используйте одинstrcpy, а затем используйте strcat в других местах, чтобы добавить к строке.

OP: Это проблема решена, как описано выше:

110  strcpy(filename,"output/"); 
111  strcat(filename,image_file_name); 
112  strcat(filename, ".txt"); 
113  printf(filename);