У меня возникли проблемы с получением 8-битного двоичного числа из файла и присвоением ему аргумента char * argv [] для моей программы
Вы не можете этого сделать , Обычное объявление
int main(int argc, char** argv){};
означает, что эти 2 аргумента предоставляются вам операционной системой при запуске вашей программы. То, что вы можете сделать, это создать что-то подобное для вашей программы, скажем, int myArgCount
и char** myArgValues;
, но, похоже, вам это не нужно.
Если task
ваша программа, выполняется task 00001111
положит 00001111
в argv[1]
. И установите argc
на 2, поскольку argv[0]
всегда является полным путем к вашей программе.
Сначала вы говорите, что двоичное число может быть предоставлено в файле, но в следующем параграфе вы сказали
я хочу повернуть каждый 8-битный двоичный номер, разделенный пробелами
Если на самом деле входной файл может иметь список 8-битных двоичных чисел, разделенных пробелы - а не только один - вам нужно будет создать список точно так же, как система делает для вас, выделив память для чисел и создав массив указателей на них, и int с количеством чисел. Это не сложно.
Приведенный ниже код проверяет аргумент в командной строке и, если его нет, пытается открыть файл source.txt
, чтобы получить его. Может быть, это поможет.
Обратите внимание на использование scanf()
для чтения значений из файла. Используемая маска "%8[01]"
очень удобна: она принимает только 0 и 1 для максимум 8 цифр.
#define _CRT_SECURE_NO_WARNINGS
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
int main(int argc, char** argv)
{
char binary_number[10];
char* mask = "%8[01]"; // for scanf()
const char* FileName = "source.txt";
if (argc < 2)
{ // no number on the command line
fprintf(stderr, "\nNo 8-bit number provided on the command line\n");
FILE* in_file = fopen(FileName, "r");
if (in_file == NULL)
{
fprintf(stderr, "Could not open [%s]\n", FileName);
return -1;
}
int n = fscanf(in_file, mask, binary_number);
printf("\nFrom the file [%s] number is [%s]\n", FileName, binary_number);
fclose(in_file);
}
else
{ // number provided
strncpy(binary_number, argv[1], 9);
fprintf(stderr, "\nFrom the command line: [%s]\n", argv[1]);
};
return(EXIT_SUCCESS);
};
программа показывает
From the command line: [101010]
или
No 8-bit number provided on the command line
From the file [source.txt] number is [11110000]