Я пытаюсь узнать c, где основная функция вызывает какую-то другую функцию, возвращающую массив (например, строкового типа).
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char* array_return(char* name);
int main(){
char* name="orange";
char* A;
A=array_return(name);
free(A);
printf("%s\n","Check stored values in A");
int k,n;
n=10;
for (k=0; k < n; k++) {
printf("%s\n",A[k]);
}
return 0;
}
char* array_return(char* name){
int k,n;
n=10;
char* A=malloc(n);
char string[100];
printf("%s\n","Store values in A");
for (k=0; k < n; k++) {
strcpy(string,"Numer of ");
strcat(string,name);
strcat(string," are: ");
sprintf(string,"%s %i",string,k);
A[k]=string;
printf("%s\n",A[k]);
}
printf("%s\n","--------------------------");
return A;
}
Я пытаюсь сохранить следующие значения в массиве "A":
Numer of orange are: 0
Numer of orange are: 1
Numer of orange are: 2
Numer of orange are: 3
Numer of orange are: 4
Numer of orange are: 5
Numer of orange are: 6
Numer of orange are: 7
Numer of orange are: 8
Numer of orange are: 9
Однако я получаю следующие предупреждения
warning: format specifies type 'char *' but the argument has type
'char'
incompatible pointer to integer conversion assigning to 'char'
from 'char [100]' [-Wint-conversion]
И я получаю следующую ошибку при запуске программы:
Segmentation fault: 11
Я был бы очень благодарен, если бы кто-нибудь помог мне отладить этот код.
sprintf(string,"%s %i",string,k);
: Fromman sprintf
: DESCRIPTION [...] C99 и POSIX.1-2001 указывают, что результаты не определены, если вызов sprintf() , snprintf(), vsprintf() или vsnprintf() вызовет копирование между перекрывающимися объектами (например, если целевой массив строк и один из предоставленных входных аргументов ссылаются на один и тот же буфер). - person alk   schedule 21.06.2017free()
ed. - person alk   schedule 21.06.2017