чтение строки в C

программирование C++

пытаюсь прочитать так строку

fscanf(f,"%[^\n]",s);

почему-то получаю зацикливание

Примечание:
#include <stdio.h>
#include <stdlib.h>
int transformation_couplet(char str[]);
int get_couplet(char str[],FILE *f)
{
int i=0;
int j=0;
char ch=getc(f);
while(i<=3)
{
fscanf(f,"%[^\n]",s);
transformation_couplet(str);
i++;
}
}
int transformation_couplet(char str[])
{
char ALF[26]={'Q','W','E','R','T','Y','U','I','O','P','A','S','D','F','G','H','J','K','L','Z','X','C','V','B','N','M'};
char alf[26]={'q','w','e','r','t','y','u','i','o','p','a','s','d','f','g','h','j','k','l','z','x','c','v','b','n','m'};
char str1[255]={NULL};
int i=0;
int flag=0;
for(int i=0;str[i]!='\0';i++)
printf("%c",str[i]);
/*if(str[0]==' ')
{
while(str[i]==' ')
{
i++;
}
for(int k=i,p=0;str[k]!='\0';k++,p++)
{
str1[p]=str[k];
}
}*/

}

int main()
{
char str[255]={NULL};
FILE *file=fopen("stih.txt","r");
while(!feof(file))
{
get_couplet(str,file);
for(int i=0;i<255;i++)
str[i]='\0';
}
return 0;
}

Примечание:
только в сканф это я щас опечатался, там str должно быть
Ответы:
После того как у Вас fscanf натыкается на перевод строки, последующие вызовы fscanf не могут ничего считать, так как натыкаются на тот же перевод строки, который Вы считываете только один раз за 4 вызова fscanf.
Си строки должны заканчиваться на нулевой байт. Это признак окончания строки. При чтении Си строки, функция ищет этот признак, и если его не находит, читает дальше. Создавая Си строку, без нулевого байта, Вы не обозначаете конец строки и функция чтения, прочитав строку, лезет в последующую область памяти. Это плохо.


14 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.