2015-03-14 4 views
-1

Что я пытаюсь сделать, это взять имя в качестве выходного файла, а затем строку, из которой я хочу fprintf каждый символ по одному в выходной файл.Как я могу прокручивать каждый символ строки?

#include <stdio.h> 

int main(void){ 
char* outputName; 
char* input; 
printf("Type in the name of the output file: "); 
scanf("%s",outputName); 
FILE *outputFile = fopen(outputName , "w"); 
printf("type something: "); 
scanf("%s", input); 
int i; 
for(i = 0; i < sizeof(input)/sizeof(input[0]) ; i++){ 
    fprintf(outputFile,"%c" ,input[i]); 
    } 
    fclose(outputFile); 
    return 0; 
} 

Когда я запускаю его, запрашивает имя выходного файла, а затем он сбой. Что я делаю не так?

Кстати, я совершенно не знаком с C. Любая помощь приветствуется.

+1

0) Область ввода для хранения не гарантируется. – BLUEPIXY

ответ

2

sizeof(input)/sizeof(input[0]) не будет работать здесь, потому что input является указателем, поэтому sizeof(input) просто укажет размер указателя, а не размер массива, на который указывают.

Использование strlen, который не вычисляет число символов до нулевого терминатора:

for(i = 0; i < strlen(input) ; i++){ 

Btw вы забыли выделить память input и outputName. Чтобы это исправить:

char outputName[n]; 
char input[n]; 

где n есть некоторое магическое число, обозначающее количество символов, которые можно хранить в C-строки, включая завершающий нулевой символ.

Обратите внимание, что этот подход (с использованием массивов вместо указателей) делает sizeof(input)/sizeof(input[0]) работы так, как вы планировали.

+0

Я сделал то, что вы сказали, но теперь он не хранит символы в выходном файле – tDog

+0

, он работает на окнах, но он не работает на linux – tDog

+0

Нет, моя ошибка работает! – tDog

1

char* outputName и char* input - это просто указатели, которые не указывают на какую-либо действительную память.

Вместо этого у вас должен быть массив символов, в котором вы можете хранить свои символы.

пример:

char outputName[100]; 
char input[100]; 
Смежные вопросы