2015-12-07 3 views
1

Вот код, который я пытаюсь запуститьПочему не работает перенаправление ввода?

#include<stdio.h> 
#include<string.h> 


int overFlow(char* value){ 
    char string[8]; 
    strcpy(string, value); 
    return 0; 
} 

int main(int argc, char** argv){ 
    char string[10]; 
    strcpy(string, argv[1]); 
    overFlow(string); 
    return 0; 
} 

простой текстовый файл, который имеет этот

hello 

, но когда я исполню «./program < текстовый файл» Я получаю ошибку сегм ,

Любая помощь будет отличной. Благодарю.

+0

Ваша «командная оболочка» меняет STDIN с терминала на содержимое «текстового файла». Ваша программа должна опросить «argc», чтобы определить, существуют ли аргументы ... «./program TonyB

+0

Что именно вы пытаетесь сделать здесь? Вы хотите прочитать файл через перенаправление ввода? или вы хотите прочитать его из файла, заданного в качестве аргумента для вашей программы. Ваш код btw противоречит тому, как вы его написали, и как вы его используете. – mohit

ответ

1

При выполнении вашей программы с помощью следующей команды:

./program < textfile 

Вы не проходят никаких аргументов в программе. Так агд отсчет 1, и этот массив: ARGV просто имеет название программы

И эта линия не может:

strcpy(string, argv[1]); 
-1

Другие ответы правы по поводу фактической причины. Команда, которую вы могли бы использовать для вызова программы заключается в следующем:

cat textfile | ./myprogram 

Что это делает первая команда кошки выводит содержимое текстового файла а | оператор выводит вывод одной команды на вход следующего. Так что тогда работает

./myprogram hello 

Вы также можете увеличить свои буферы и посмотреть на strncpy, чтобы предотвратить переполнение.

Смежные вопросы