Это более четко показывает, что вы должны делать, оставаясь близко к исходному коду:
void test(char ** s, int len) {
char *p = malloc(len);
int i;
for(i = 0; i < len; i++) {
p[i] = 'a';
}
printf("%s\n", p);
*s = p;
}
Обратите внимание, что sizeof(char)
всегда один по определению, и в C нет необходимости приводить результат malloc()
.
В этом коде также есть все ваши исходные проблемы, поскольку он фактически не создает строку, которую вы можете отправить printf( "%s... )
. Это решает эту проблему:
void test(char ** s, int len) {
char *p = malloc(len+1);
int i;
for(i = 0; i < len; i++) {
p[i] = 'a';
}
p[i]='\0';
printf("%s\n", p);
*s = p;
}
И это еще проще, без необходимости использовать двойной указатель *
:
char *test(int len) {
char *p = malloc(len+1);
int i;
for(i = 0; i < len; i++) {
p[i] = 'a';
}
p[i]='\0';
printf("%s\n", p);
return(p);
}