TiNik Nikolay
Участник
Offline
|
|
« : 10-01-2007 07:37 » |
|
#include<iostream.h> void MyCtp(char *str); int main() { char string; MyCtp(&string); cout<<string; return 0; } void MyCtp(char *str) { *str="C++"; }
|
|
|
Записан
|
|
|
|
RXL
|
|
« Ответ #1 : 10-01-2007 08:10 » |
|
TiNik, тут приколов нет - есть сплошные некорректности. Я насчитал 2 штуки.
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
TiNik Nikolay
Участник
Offline
|
|
« Ответ #2 : 10-01-2007 08:14 » |
|
Тогда как заставить её зароботать?С числами это легко, а как реализ со строками??? #include<iostream.h> void MyNum(int *i); int main() { int num; MyNum(&num); cout<<num; return 0; } void MyNum(int *i) { *i=123; }
|
|
|
Записан
|
|
|
|
RXL
|
|
« Ответ #3 : 10-01-2007 08:24 » |
|
Строка в C/C++ - это массив символов. Сооотв., объявляем указатель на символ и передаем в ф-ию адрес указателя (но не его значение!). void my_string(char ** pstr) { *pstr = "aaaa"; // "aaa" - это указатель на статический массив символов. }
int main() { char * str; my_string(&str); ..... }
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
TiNik Nikolay
Участник
Offline
|
|
« Ответ #4 : 10-01-2007 08:55 » |
|
Спасиба!!!
|
|
|
Записан
|
|
|
|
Джон
просто
Администратор
Offline
Пол:
|
|
« Ответ #5 : 10-01-2007 11:31 » |
|
Всё-равно, даже так, лучше не делать. Правильнее будет передавать в ф-ю буфер, и освобождать его потом. int MyStr(char *psz) { char pszDat[] = "functions data"; int nRet = strlen(pszDat); if(psz) { strncpy(psz, pszDat, nRet); } return nRet; }
int _tmain(int argc, _TCHAR* argv[]) { int nLen = MyStr(NULL); if(nLen>0) { char *psz = new char[nLen+1]; memset(psz,0,nLen+1); MyStr(psz); printf("Data: %s", psz); delete [] psz; } else { printf("No Data"); } return 0; }
|
|
|
Записан
|
Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома. "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."
|
|
|
TiNik Nikolay
Участник
Offline
|
|
« Ответ #6 : 10-01-2007 11:35 » |
|
А как свой strcpy() написать или strncat()?
|
|
|
Записан
|
|
|
|
Джон
просто
Администратор
Offline
Пол:
|
|
« Ответ #7 : 10-01-2007 11:54 » |
|
очень просто - главное помнить, что речь идёт о простом массиве элементов. те strcpy() - "strncat()?" что делает?
|
|
« Последнее редактирование: 10-01-2007 11:56 от Джон »
|
Записан
|
Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома. "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."
|
|
|
Serg79
|
|
« Ответ #8 : 10-01-2007 12:24 » |
|
А как свой strcpy() написать или strncat()?
Проблем с этим помоему не должно возникать. Вот смотри: char *my_strcpy(char *to, const char *from) { char *temp = to;
while( *from ) *to++ = *from++; *to = '\0'; return temp; }
char *my_strncat(char *to, const char *from, unsigned int size) { unsigned int i = strlen(to);
for( ; *from && size; i++, size-- ) to[i] = *from++; to[i] = '\0'; return to; }
|
|
« Последнее редактирование: 15-12-2007 21:59 от Алексей1153++ »
|
Записан
|
|
|
|
TiNik Nikolay
Участник
Offline
|
|
« Ответ #9 : 10-01-2007 12:33 » |
|
Я может ...(Достоевский) но вот это?! char *my_strcpy(char *to, const char *from) - это функция как и void MyCtp(char *str) ?! Я правильно понимаю!!!
|
|
|
Записан
|
|
|
|
Serg79
|
|
« Ответ #10 : 10-01-2007 12:59 » |
|
Я может ...(Достоевский) но вот это?! char *my_strcpy(char *to, const char *from) - это функция как и void MyCtp(char *str) ?! Я правильно понимаю!!!
Что то Я не пойму, что Ты хочешь спросить.
|
|
|
Записан
|
|
|
|
TiNik Nikolay
Участник
Offline
|
|
« Ответ #11 : 10-01-2007 13:17 » |
|
Я имел ввиду что можна использовать char как void,int!!!Вот что я спрашивал!!!
|
|
|
Записан
|
|
|
|
Джон
просто
Администратор
Offline
Пол:
|
|
« Ответ #12 : 10-01-2007 13:22 » |
|
TiNik, а ты вообще-то чем занимаешься?
|
|
|
Записан
|
Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома. "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."
|
|
|
PooH
Глобальный модератор
Offline
Пол:
... и можно без хлеба!
|
|
« Ответ #13 : 10-01-2007 13:28 » |
|
если мне не изменяет память, то все простые типы имеют числовое представление.
|
|
|
Записан
|
Удачного всем кодинга! -=x[PooH]x=-
|
|
|
TiNik Nikolay
Участник
Offline
|
|
« Ответ #14 : 10-01-2007 13:41 » |
|
Джон я учусь и танцую, а вчём дело!?
|
|
|
Записан
|
|
|
|
Джон
просто
Администратор
Offline
Пол:
|
|
« Ответ #15 : 10-01-2007 14: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."
|
|
|
RXL
|
|
« Ответ #16 : 10-01-2007 16:07 » |
|
"strncat()?" что делает?
Ф-ии серии XXXnYYY() имеют доп.параметер, ограничивающий макс.длину обрабатываемой строки. Напр., snprintf(buffer, size, fmt, ...) не даст переполнить буфер.
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
Джон
просто
Администратор
Offline
Пол:
|
|
« Ответ #17 : 10-01-2007 16:36 » |
|
Ага я уже понял из примера Serg79. Я именно её никогда не использовал, а в справочник в лом было лезть.
|
|
|
Записан
|
Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома. "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."
|
|
|
Serg79
|
|
« Ответ #18 : 11-01-2007 05:32 » |
|
Я имел ввиду что можна использовать char как void,int!!!Вот что я спрашивал!!!
Вот в этом топике ( https://forum.shelek.ru/index.php/topic,5525.0.html ) есть ссылка на хорошую книгу по 'C'. В ней ты найдешь, что представляют из себя типы данных ( void, char, int ...), их размерность, и как они размещаються в памяти машины. Так же, там описанны указатели, массивы, и другие более сложные структуры данных. Читай эту книгу, что будет не понятно спрашивай на форуме и тебе обязательно помогут. Но на глупые вопросы типа приведенного выще, Я думаю отвечать тебе не станут.
|
|
« Последнее редактирование: 15-12-2007 22:00 от Алексей1153++ »
|
Записан
|
|
|
|
|