Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Cannot convert 'char *' to 'char[]', как это преодолеть 
:(
    Опции темы
mclight
Дата 3.8.2005, 03:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 160
Регистрация: 6.7.2005
Где: Baku, Azerbaijan

Репутация: нет
Всего: 2



Цитата(LPBOY @ 3.8.2005, 03:18)
Функция is_dir написана средствами WinAPI (т.е. ориентирована на Windows),
а в остальной программе используются функции библиотеки борланда (ориентированной на MS-DOS).


я это сделал чтобы переводить было легче.
--------------------
Как я решал подводные камни Cakephp и не только
PM WWW ICQ MSN   Вверх
LPBOY
Дата 3.8.2005, 05:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 228
Регистрация: 12.7.2005

Репутация: 20
Всего: 20



Цитата(mclight @ 3.8.2005, 01:25)

если написать

1: if(!chdir(ent->d_name)) printf("ошибка");

то перед каждом открытием новой папки будет выводиться слово "ошибка",
затем название папки. конечно очень хочется узнать в чем тут проблема.

Выводится "ошибка", потому что ты сам это выводишь. Функция chdir возвращает 0 в случае успешного завершения,
поэтому инструкция if(!chdir(ent->d_name)) printf("ошибка"); выводит строку "ошибка" при каждом успешном завершении
chdir. Логичней написать if(chdir(ent->d_name)) printf("ошибка");

Программа работает, но в некоторых местах можно немного улучшить.

1) строку if(ent->d_name[0]=='.' && (ent->d_name[1]==0 || (ent->d_name[1]=='.' && ent->d_name[2]==0)))continue;
можешь спокойно заменить на if(ent->d_name[0]=='.') continue; Дело в том что если первый символ точка, то это
в любом случае или "."(текущая папка) или ".."(предыдущая) делать дополнительные проверки на ноль и вторую точку незачем.
Имя обычной папки не может начинаться с точки.

2) while((ent=readdir(d))!=NULL) это то же самое, что while(ent=readdir(d))

3) строку 16 int i,a; замени на int i; ;)
--------------------
Каждый человек по-своему прав, а по-моему нет...
PM MAIL   Вверх
mclight
Дата 3.8.2005, 05:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 160
Регистрация: 6.7.2005
Где: Baku, Azerbaijan

Репутация: нет
Всего: 2



уй мля. у меня че-то совсем крыша поехала. вот что значит не спать по ночам. извините что потревожил Вас по пустякам.


3) ну это обычная опечатка.

огромное Вам спасибо!
Добавлено @ 05:21
Цитата(LPBOY @ 3.8.2005, 05:02)
while(ent=readdir(d))

выдает предупреждение.
--------------------
Как я решал подводные камни Cakephp и не только
PM WWW ICQ MSN   Вверх
LPBOY
Дата 3.8.2005, 09:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 228
Регистрация: 12.7.2005

Репутация: 20
Всего: 20



Цитата(mclight @ 3.8.2005, 05:19)
выдает предупреждение.

Какое предупреждение?
--------------------
Каждый человек по-своему прав, а по-моему нет...
PM MAIL   Вверх
mclight
Дата 4.8.2005, 00:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 160
Регистрация: 6.7.2005
Где: Baku, Azerbaijan

Репутация: нет
Всего: 2



не помню точно какое. я все же оставил прежний вариант. на всякий. вот а вообще спасибо. просто не было времени разбираться. код был скопирован с РНР. и соответственно при переводе на С++ были проблемы. а времени ужас как не было. так что огромное спасибо
!
--------------------
Как я решал подводные камни Cakephp и не только
PM WWW ICQ MSN   Вверх
Ni@m
Дата 4.8.2005, 10:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 189
Регистрация: 11.3.2004
Где: почти Киев

Репутация: 0
Всего: 6



Цитата(LPBOY @ 1.8.2005, 12:42)
Массив и указатель это разные вещи.

Поработав в с/с++ начинаешь терять ориентацию между реальностью и указателями. smile
В общем указателями реализовывается массив. Единственнон удобство статического массива - что за тебя освобождает память компилятор. Это безусловно удобно. Но принцип действия - как и у указателя.
Ну и конечно не надо забывать, что массива как типа нету. Нету типа array и тут не попишешь. Это не паскаль.
Ведь
--------------------
Обучение - как переливание воды из одной чашки в другую: всегда лучше, чтоб чашка со знаниями нахордилась выше.
PM MAIL WWW ICQ   Вверх
Void
Дата 4.8.2005, 11:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


λcat.lolcat
****


Профиль
Группа: Участник Клуба
Сообщений: 2206
Регистрация: 16.11.2004
Где: Zürich

Репутация: 40
Всего: 173



Ni@m
Вообще говоря, тип массива есть. Но он сохраняется только в пределах видимости переменной.

mclight
На предупреждение можешь забить - в меру умный компилятор напоминает, что в условии можно сделать опечатку и написать "=" вместо "==". В данном случае все верно.


--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
LPBOY
Дата 4.8.2005, 11:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 228
Регистрация: 12.7.2005

Репутация: 20
Всего: 20



Цитата(Ni @ 4.8.2005, 10:56)
В общем указателями реализовывается массив.

Ничего подобного. Имеется стандартное преобразование имени массива в указатель на его первый элемент,
но не надо путать массив и указатель - это совершенно разные типы.

Цитата(Ni @ 4.8.2005, 10:56)
Ну и конечно не надо забывать, что массива как типа нету.
Нету типа array и тут не попишешь. Это не паскаль. Ведь

Авторы Стандарта С++ считают по-другому:
"8.3.4
In a declaration T D where D has the form
D1 [constant-expression]
and the type of the identifier in the declaration T D1 is "derived-declarator-type-list T",
then the type of the identifier of D is an array type."

Откомпилируй, например, такую программу:
Код

#include <iostream>
#include <typeinfo>
#include <conio.h>

using namespace std;

int main()
{
    cout<<boolalpha;
    cout<<bool(typeid(int[])==typeid(int*));
    getch();
    return 0;
}

Выдает false, кроме старых версий VC, у которых глюк по этому поводу.

Это сообщение отредактировал(а) LPBOY - 4.8.2005, 11:49
--------------------
Каждый человек по-своему прав, а по-моему нет...
PM MAIL   Вверх
comcon1
Дата 4.8.2005, 11:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 838
Регистрация: 11.6.2005
Где: Москва ДАС-МГУ

Репутация: 12
Всего: 17



И еще -- readdir возвращает указатель на отведенную внутри нее память. Ты должен ее освобождать в конце каждого оборота цикла.

Это сообщение отредактировал(а) comcon1 - 4.8.2005, 11:57


--------------------
PM MAIL   Вверх
Ni@m
Дата 4.8.2005, 13:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 189
Регистрация: 11.3.2004
Где: почти Киев

Репутация: 0
Всего: 6



Цитата(LPBOY @ 4.8.2005, 11:47)
Ничего подобного. Имеется стандартное преобразование имени массива в указатель на его первый элемент,
но не надо путать массив и указатель - это совершенно разные типы.

Мне кажется на уровне процессорных инструкций - тоже smile
Дело в том, что компилятору можно отследить его размеры и своевременно освободить занимаемую им память, тем самым он проще в использовании.

Цитата(Void @ 4.8.2005, 11:14)
Вообще говоря, тип массива есть. Но он сохраняется только в пределах видимости переменной.

Попрошу разьеснить что значит в пределах видимости переменной в данном случае. Ведь с указателем таже ситуация. Или я уже запутался smile
--------------------
Обучение - как переливание воды из одной чашки в другую: всегда лучше, чтоб чашка со знаниями нахордилась выше.
PM MAIL WWW ICQ   Вверх
Void
Дата 4.8.2005, 19:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


λcat.lolcat
****


Профиль
Группа: Участник Клуба
Сообщений: 2206
Регистрация: 16.11.2004
Где: Zürich

Репутация: 40
Всего: 173



Цитата(Ni @ 4.8.2005, 15:24)
Попрошу разьеснить что значит в пределах видимости переменной в данном случае. Ведь с указателем таже ситуация. Или я уже запутался smile

Это значит, что вне области видимости (например, при передаче в качестве параметра функции) тип T[N] неотличим от T*. Но в ее пределах это разные типы и даже массивы разного размера - разные типы. Например, специализации шаблона типом int[5] и int[10] различаются.


--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0525 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.