Я пытаюсь создать программу, которая читает файл, содержащий буквы [a-z]. Затем я замените с 1, е с 2, я с 3, о с 4 и у с 5. Я запустить программу с вводе команды Удаление первого символа из строки приводит к ошибке сегментации
./tr AEIOU 12345 < data.txt // Нет пространства между < и data.txt
Мой код:
#include<stdio.h>
int main(int argc, char **argv)
{
FILE *fp;
fp = fopen(argv[3], "r");
char input[100];
fscanf(fp, "%[^\n]", input);
int a = 0, b = 0;
if(argv[3][0] == '<') {
(*(argv[3]))++; //SEGFAULT
}
while(input[a] != '\0') {
if(input[a] == argv[1][b]) {
input[a] = argv[2][b];
++b;
}
++a;
}
printf("%s", input);
fclose(fp);
return 0;
}
Если я запустить программу с
./tr AEIOU +12345 data.txt // Обратите внимание, не <
Затем он работает нормально, но это дает мне Сегментация ошибку, когда я запускаю его с <. Почему это? По моему мнению, он не должен занимать больше памяти, просто переместив указатель на один символ вправо.
Есть ли более простой способ сделать это? Какие-либо предложения? Спасибо
Думаю, вы обнаружите, что 'argv [3]' равно null. Для подтверждения используйте отладчик. Вы должны проверить 'argc' и помнить, что C запускает массивы с индексом нуля. –
@EdHeal вы правы, но 'argv [0] =./Tr' – JackVanier
Где же командной строки разделяется между материалами, которые использует оболочка, и программа использует? Просто проверьте значение 'argc' –