![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Dar |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 26.11.2007 Репутация: нет Всего: нет |
Выручайте...
Надо написать программку, считывающую то, что находится в текстовом файле на определенном месте... Пишу: #include<stdio.h> #include<conio.h> #include<string.h> #include<stdlib.h> int main (void) { FILE* f; char* Str; char* NameVal; char* SumVal; char NameStr[]=":32"; char BufStr[128]=""; char Test; if((f=fopen("f.txt","rt"))!=0) { Str=fgets(BufStr,sizeof(BufStr),f); while(Str!=0) { Str=strstr(BufStr,NameStr); if(Str!=0) { NameVal=&(Str[0]); NameVal=NameVal+11; memset(Str,0,sizeof(Str)); strncpy(Str,NameVal,3); printf("%s\n",Str); Test=*Str; SumVal=NameVal+3; memset(Str,0,sizeof(Str)); strncpy(Str,SumVal,16); printf("%s\n",Str); } Str=fgets(BufStr,sizeof(BufStr),f); } fclose(f); } printf("%s\n",Test); getch(); return 0 ; } Читать, читает, на экран выводит, но сохранить (для последующего сравнения) не получается..... |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
замени printf на fprintf (документация тебе поможет понять как именно).
|
|||
|
||||
| JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 18 Всего: 162 |
Dar, пользуйся кнопкой "код" для оформления твоего кода, читать же неудобно.
|
|||
|
||||
| xvr |
|
||||||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 60 Всего: 223 |
Давай угадаю - TC++ 3.1 ?
Зануляешь указатель Str (теперь он равен NULL)
Копируешь в NULL 3 символа, распечатываешь по NULL, считываешь 1 символ по NULL - 3 раза segmentation fault
Читать, выводить а тем более сохранять из NULL получаться и не должно |
||||||||
|
|||||||||
| Dar |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 26.11.2007 Репутация: нет Всего: нет |
to JackYF: ок.
to xvr: >Давай угадаю - TC++ 3.1 ? Не угадал, просто задание по работе... на Си.... >Копируешь в NULL 3 символа, распечатываешь по NULL, считываешь 1 символ по NULL - 3 раза segmentation fault Снова не угадал... memset чистит Str, но не NameVal, а strncpy копирует первые 3-и символа NameVal в Str, так что никаких NULLов... Проблема в том, что бы значение полученное в этом if сохранить куда-нибудь в переменную, для дальнейшего использования, что увы, не получается... :( to bsa: Спасибо, попробую... |
|||
|
||||
| xvr |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 60 Всего: 223 |
Да, с NULL я был не прав, но и ты не прав тоже - memset чистит память, КУДА УКАЗЫВАЕТ Str (причем размеров с сам Str, т.е. char*, т.е. ровно 4 байта, что совсем уже бред).
Сделай отдельный массив и копируй туда. С за тебя память под строки выделять не будет, а указатель - это еще не строка, строка, это то, КУДА он указывает, а указывает он у тебя всегда куда то в середину BufStr |
||||
|
|||||
| Puoar |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 43 Регистрация: 10.11.2007 Репутация: нет Всего: 1 |
||||
|
||||
| xvr |
|
||||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 60 Всего: 223 |
Я не знаю, что имел в виду Dar, но написал он именно memset(Str,0,sizeof(Str));. Кроме того, если бы он написал memset(BufStr,0,sizeof(BufStr));, то это привело бы к очистке ВСЕГО буфера вместе со всеми только что прочтенными данными, что явно не то, что он хотел Это сообщение отредактировал(а) xvr - 27.11.2007, 16:06 |
||||||
|
|||||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |