Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
sad-angel
Встал на лапы
Сообщения: 122 Зарегистрирован: Пт июл 11, 2008 21:49:40
Откуда: Украина
Сообщение
sad-angel » Пт сен 06, 2013 16:58:30
Есть такая задачка:
Код: Выделить всё
... ...my_copyStr(...) { ... } int main(int argc, char *arcv[ ]) { char *zsStrHello = "Hello"; char *zsResStr =0; my_copyStr(...); printf("RES: %s",zsResStr); free(zsResStr); return 0; }в место точек нужно написать свои данние, в другом месте изменять нельзя. Результат должен получиться RES: Hello
Сделал так, не работает.
Код: Выделить всё
#include <string.h> my_copyStr(char **str1, char **str2) { str1 = (malloc((strlen(str2)+1) * sizeof(char)); strncpy(str1,str2,strlen(str1)); } int main(int argc, char *arcv[ ]) { char *zsStrHello = "Hello"; char *zsResStr =0; my_copyStr(zsResStr,zsStrHello); printf("RES: %s",zsResStr); free(zsResStr); return 0; }
Zud
Встал на лапы
Сообщения: 129 Зарегистрирован: Пн авг 19, 2013 03:23:00
Откуда: замкадье
Сообщение
Zud » Пт сен 06, 2013 17:34:26
sad-angel писал(а): Есть такая задачка:
Код: Выделить всё
my_copyStr(char **str1, char **str2) ... char *zsStrHello = "Hello"; char *zsResStr =0; my_copyStr(zsResStr,zsStrHello);Учебная что-ли ?
А чего это в объявлении my_copyStr указатель на указатель, а в функцию передаётся просто указатель?
a_skr
Вымогатель припоя
Сообщения: 630 Зарегистрирован: Пн июн 14, 2010 13:07:29
Откуда: Жуковский
Сообщение
a_skr » Пт сен 06, 2013 17:55:05
ужас.
Код: Выделить всё
#include <stdio.h> #include <string.h> #include <stdlib.h> void my_copyStr(char** str1, char* str2) { *str1 = malloc((strlen(str2)+1) * sizeof(char)); strncpy(*str1,str2,(strlen(str2)+1) * sizeof(char)); } int main(int argc, char *arcv[ ]) { char *zsStrHello = "Hello"; char *zsResStr =0; my_copyStr(&zsResStr,zsStrHello); printf("RES: %s",zsResStr); free(zsResStr); return 0; }
sad-angel
Встал на лапы
Сообщения: 122 Зарегистрирован: Пт июл 11, 2008 21:49:40
Откуда: Украина
Сообщение
sad-angel » Пт сен 06, 2013 19:37:51
Zud писал(а): sad-angel писал(а): Есть такая задачка:
Код: Выделить всё
my_copyStr(char **str1, char **str2) ... char *zsStrHello = "Hello"; char *zsResStr =0; my_copyStr(zsResStr,zsStrHello);Учебная что-ли ?
А чего это в объявлении my_copyStr указатель на указатель, а в функцию передаётся просто указатель?
На собеседовании была такая....
xido
Нашел транзистор. Понюхал.
Сообщения: 171 Зарегистрирован: Пт ноя 16, 2012 18:53:40
Сообщение
xido » Ср сен 18, 2013 21:01:48
Можно использовать готовое - strdup
xido
Нашел транзистор. Понюхал.
Сообщения: 171 Зарегистрирован: Пт ноя 16, 2012 18:53:40
Сообщение
xido » Ср сен 18, 2013 21:05:25
sad-angel писал(а): Есть такая задачка:
Сделал так, не работает.
Код: Выделить всё
#include <string.h> my_copyStr(char **str1, char **str2) { str1 = (malloc((strlen(str2)+1) * sizeof(char)); strncpy(str1,str2,strlen(str1)); } Я вообще удивляюсь что она не падает.
В strncpy ( и strlen) надо передать указатель char*, а передается указатель на указатель. В результате должен портится стек.
Попробуйте включит сообщения компилятора (или прислушаться к ним
)
Для gcc это gcc -Wall