Страница 1 из 1

Задачка по С

Добавлено: Пт сен 06, 2013 16:58:30
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;
}

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

Добавлено: Пт сен 06, 2013 17:34:26
Zud
sad-angel писал(а):Есть такая задачка:

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

my_copyStr(char **str1, char **str2)
...
 char *zsStrHello = "Hello";
 char *zsResStr =0;
  my_copyStr(zsResStr,zsStrHello);


Учебная что-ли ?
А чего это в объявлении my_copyStr указатель на указатель, а в функцию передаётся просто указатель?

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

Добавлено: Пт сен 06, 2013 17:55:05
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;
}

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

Добавлено: Пт сен 06, 2013 19:37:51
sad-angel
Zud писал(а):
sad-angel писал(а):Есть такая задачка:

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

my_copyStr(char **str1, char **str2)
...
 char *zsStrHello = "Hello";
 char *zsResStr =0;
  my_copyStr(zsResStr,zsStrHello);


Учебная что-ли ?
А чего это в объявлении my_copyStr указатель на указатель, а в функцию передаётся просто указатель?


На собеседовании была такая....

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

Добавлено: Ср сен 18, 2013 21:01:48
xido
Можно использовать готовое - strdup

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

Добавлено: Ср сен 18, 2013 21:05:25
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