Я пытаюсь прочитать строки из файла, который выглядит следующим образом:
String1 A
String2 B
String3 C
и т. Д.
и хранить их в двух отдельных структурных массивах;имя_строки и группа.Все, что я нашел, было для строк, разделенных символом или другими кодами, которые похожи, но не та же самая проблема
#include "stdafx.h"
#include "stdio.h"
#include "stdlib.h"
#include <math.h>
#include "string.h"
struct StringStruct {
char Stringname[16];
char group[1];
}String[100];
int MaxNumLines = 100, i;
char str[25];
int main()
{
// open String.dat file as a read from file
FILE *fp1;
errno_t string_file = fopen_s(&fp1, "String.dat", "r");
// if String.dat not found,
if (fp1 == NULL)
{
// print error
printf_s("Error: String.dat not found\n");
exit(0);
}
// if String.dat found
else
{
// print success
printf_s("File String.dat opened successfully\n");
}
// read names and assign groups
while (fscanf_s(fp1, "%s %s", String[i].Stringname, String[i].group) != EOF)
{
// read names one line at a time
for (i = 0; i < MaxNumLines; i++)
{
// read string name
scanf_s(str, "%s %s", String[i].Stringname, String[i].group);
}
}
for (i = 0; i < MaxNumLines; i++)
{
printf_s("%-12s", String[i].Stringname);
printf_s("%s", String[i].group);
}
}
}
Теперь, на мой взгляд, все должно работать,но это не так, и я также получаю предупреждения fscanf_s:
- предупреждение C4477: 'fscanf_s': строка формата '% s' требует аргумент типа 'unsigned int',но переменный аргумент 2 имеет тип 'char *'
- примечание: этот аргумент используется в качестве размера буфера
- предупреждение C4473: 'fscanf_s': недостаточно аргументов для строки формата
- примечание: заполнители и их параметры ожидают 4 переменных аргумента, но было предоставлено 2
- примечание: отсутствующий переменный аргумент 3 требуется для строки формата "% s"
- примечание: этот аргументиспользуется спецификатором преобразования
Но я посмотрел на функцию fscanf_s и все, похоже, соответствует ее описанию использования.
Я не самый опытный вС, но я училсядо сих пор это происходило в течение года, и я пытался найти решение этих проблем в течение нескольких дней, но за это время не добился прогресса.