Задачка по С

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Ответить
Аватара пользователя
sad-angel
Встал на лапы
Сообщения: 122
Зарегистрирован: Пт июл 11, 2008 21:49:40
Откуда: Украина

Задачка по С

Сообщение sad-angel »

Есть такая задачка:

Код: Выделить всё


...

...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
Откуда: замкадье

Re: Задачка по С

Сообщение Zud »

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
Откуда: Жуковский

Re: Задачка по С

Сообщение a_skr »

ужас.

Код: Выделить всё

#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
Откуда: Украина

Re: Задачка по С

Сообщение sad-angel »

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

Re: Задачка по С

Сообщение xido »

Можно использовать готовое - strdup
xido
Нашел транзистор. Понюхал.
Сообщения: 171
Зарегистрирован: Пт ноя 16, 2012 18:53:40

Re: Задачка по С

Сообщение xido »

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
Ответить

Вернуться в «Разные вопросы по МК»