Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Подскажите - все должно быть очень просто  (Прочитано 12668 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Fantik
Будущий главный специалист
Участник

ru
Offline Offline

« : 10-06-2008 06:46 » 

Привет:)
Я вот с Делпхи на С перехожу. И сразу проблема.
Почему основная функция main не видит buf после обработки функцией?
Код:
#include<stdio.h>
void func (char *buf[100])
{
 char buff[]="Привет_всем!!!"    //объявляю новую строку
 *buf=buff;                         
}
void main ()
{
 char buf[100];
 func(&buf);
 printf("%s",buf);              //выводит иерогливы разные
}
Почему так?Не понялНе понялНе понялНе понялНе понялНе понялНе понялНе понялНе понялНе понялНе понял?
« Последнее редактирование: 10-06-2008 11:15 от Finch » Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


WWW
« Ответ #1 : 10-06-2008 06:51 » 

а вот так

Код:
#include<stdio.h>
void func (char** buf)
{
 *buf="Привет_всем!!!";
}

void main ()
{
 char* buf=0;
 func(&buf);
 printf("%s",buf);       
}

« Последнее редактирование: 10-06-2008 06:53 от Алексей1153++ » Записан

Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


WWW
« Ответ #2 : 10-06-2008 06:55 » 

а до этого ты копировал только указатель

 *buf=buff;

на временный буфер buff , который (буфер) после выхода из функции был не валиден (вернее - не существовал)
Записан

Fantik
Будущий главный специалист
Участник

ru
Offline Offline

« Ответ #3 : 10-06-2008 06:56 » 

Спасибо щас попробую =)
Записан
Fantik
Будущий главный специалист
Участник

ru
Offline Offline

« Ответ #4 : 10-06-2008 07:11 » 

Работает =P
Записан
Fantik
Будущий главный специалист
Участник

ru
Offline Offline

« Ответ #5 : 10-06-2008 07:47 » 

Тоже самое только в функции идет чтение строки из файла. А почему щас не работает? Жаль
Код:
#include<stdio.h>
void func (char** buf[100])
{
 int fd=open("имя файла",O_RDONLY)  //файл есть и он нормальный без косяков
 lseek(fd,0,SEEK_END);
 read(fd, *buf, 100);
 close(fd);
}

void main ()
{
 char* buf[100];
 func(&buf);
 printf("%s",buf);       
}
« Последнее редактирование: 10-06-2008 11:16 от Finch » Записан
McZim
Команда клуба

ru
Offline Offline
Пол: Мужской
Я странный


WWW
« Ответ #6 : 10-06-2008 07:52 » 

snickers,  обрамляй код тегами [ code ]...[ /code ]
Записан

The CBO without stats is like a morning without coffee. (c) T.Kyte.
McZim
Команда клуба

ru
Offline Offline
Пол: Мужской
Я странный


WWW
« Ответ #7 : 10-06-2008 07:56 » 

snickers, а что ты вот тут читаешь? read(fd, *buf, 100);
Записан

The CBO without stats is like a morning without coffee. (c) T.Kyte.
Fantik
Будущий главный специалист
Участник

ru
Offline Offline

« Ответ #8 : 10-06-2008 07:56 » 

snickers,  обрамляй код тегами [ code ]...[ /code ]
Я тебя не понимаю это как?
Записан
Fantik
Будущий главный специалист
Участник

ru
Offline Offline

« Ответ #9 : 10-06-2008 07:58 » 

это текстовый файл с набором всяких букв. Сам сгенерировал вручную =)
Вы код посмотрите правильно?
Записан
McZim
Команда клуба

ru
Offline Offline
Пол: Мужской
Я странный


WWW
« Ответ #10 : 10-06-2008 07:59 » 

snickers, когда, показываешь код, в инструментах редактирования текста есть такой инструмент как код, он имеет пиктограмму # вот в него заворачивай размещаемый тобой код в твоих сообщениях.
Записан

The CBO without stats is like a morning without coffee. (c) T.Kyte.
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


WWW
« Ответ #11 : 10-06-2008 07:59 » 

snickers , потому что тут надо иначе

Код:
#include<stdio.h>
void func (char* buf,DWORD dwdBufLen)
{
 int fd=open("имя файла",O_RDONLY)  //файл есть и он нормальный без косяков
 lseek(fd,0,SEEK_END);
 read(fd, buf, dwdBufLen);
 close(fd);
}

void main ()
{
 char buf[100+1]; // а на нуль-терминатор ещё место не надо что ли ? ;)
 
 memset(buf,0,sizeof(buf)); // sizeof(buf) - прокатит только для статического массива или не массива, тут внимательнее
 func(buf,sizeof(buf)-1); //один байт - нуль терминатор, на всяк пожарный, не забываем

 printf("%s",buf);       
}

тоже не компилировал )
И почитай про указатели и массивы теорию , сильно почитай Улыбаюсь
Записан

McZim
Команда клуба

ru
Offline Offline
Пол: Мужской
Я странный


WWW
« Ответ #12 : 10-06-2008 08:00 » 

snickers, Улыбаюсь я же тебе и делаю подсказку, что ты читаешь вот тут? read(fd, *buf, 100); смотри внимательно.
Записан

The CBO without stats is like a morning without coffee. (c) T.Kyte.
Fantik
Будущий главный специалист
Участник

ru
Offline Offline

« Ответ #13 : 10-06-2008 08:04 » 

Это для того чтобы он был другим цветом чтоли =). Ок
Записан
McZim
Команда клуба

ru
Offline Offline
Пол: Мужской
Я странный


WWW
« Ответ #14 : 10-06-2008 08:09 » 

snickers, видишь как Алексей сделал, вот делай так же, это правила форума, уважай собеседников.
Записан

The CBO without stats is like a morning without coffee. (c) T.Kyte.
Fantik
Будущий главный специалист
Участник

ru
Offline Offline

« Ответ #15 : 10-06-2008 08:14 » 

Спасибо разобрался вроде.
В делпхи както попроще на щес этого Улыбаюсь
Записан
Fantik
Будущий главный специалист
Участник

ru
Offline Offline

« Ответ #16 : 10-06-2008 08:14 » 

Классный форум Ага
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #17 : 10-06-2008 08:20 » 

Классный форум Ага
Offtopic:

Ты только не говори никому Улыбаюсь
А то набегут студенты, и пол предложат мыть.
Поставлю в угол.

С иероглифами разобрался?
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Fantik
Будущий главный специалист
Участник

ru
Offline Offline

« Ответ #18 : 10-06-2008 08:26 » 

ага разобрался
Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #19 : 10-06-2008 08:55 » 

Классный форум Ага

Он ещё лучше на самом деле. Вот если бы ты воспользовался поиском, то сразу бы нашёл тему о передачи массива в ф-ю. Рекомендую её почитать. Ага
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines