我需要你的帮助。
我有一个N个元素的静态数组。我需要插入一个函数,动态分配字符串。
这是我的代码,它有一个问题:
<<警告:从不兼容的指针类型传递'insert'的参数1。 预期'char ***'但参数类型为'char *(*)[N]'>>
感谢您的帮助!
/* MAIN */
int main()
{
char* array[N];
int i=0;
while (...)
{
i++;
insert(&array, i);
}
...
free(array);
return 0;
}
/* FUNCTION */
void insert(char*** arrayPTR, int i)
{
printf("Enter the string: ");
scanf("%s", string);
(*arrayPTR)[i]=malloc( strlen(string) * sizeof(char) );
strcpy(*arrayPTR[i], string);
}
答案 0 :(得分:2)
你几乎就在那里。你的两个主要问题是:
在将数组传递给您不需要的函数时,您需要添加额外的间接层,这实际上会给您带来问题。
虽然您需要free()
各个数组元素,但您不需要 - 也不应该 - free()
数组本身,因为您没有动态分配它。
以下是它应该更贴近的内容:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 5
#define MAX_BUFFER 100
void insert(char** arrayPTR, int i);
int main()
{
char* array[N];
/* Populate arrays */
for ( size_t i = 0; i < N; ++i ) {
insert(array, i);
}
/* Print and free them */
for ( size_t i = 0; i < N; ++i ) {
printf("String %zu: %s\n", i + 1, array[i]);
free(array[i]);
}
return 0;
}
void insert(char** arrayPTR, int i)
{
/* Prompt for and get input */
printf("Enter the string: ");
fflush(stdout);
char str[MAX_BUFFER];
fgets(str, MAX_BUFFER, stdin);
/* Remove trailing newline, if present */
const size_t sl = strlen(str);
if ( str[sl - 1] == '\n' ) {
str[sl - 1] = 0;
}
/* Allocate memory and copy */
if ( !(arrayPTR[i] = malloc(strlen(str) + 1)) ) {
perror("couldn't allocate memory");
exit(EXIT_FAILURE);
}
strcpy(arrayPTR[i], str);
}
带输出:
paul@thoth:~/src/sandbox$ ./dp
Enter the string: these
Enter the string: are
Enter the string: some
Enter the string: simple
Enter the string: words
String 1: these
String 2: are
String 3: some
String 4: simple
String 5: words
paul@thoth:~/src/sandbox$
答案 1 :(得分:0)
样品
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 10
void insert(char *arrayPTR[N], int index);
int main(void){
char *array[N] = { NULL };
int i, n;
for(i = 0; i<N; ++i){
insert(array, i);
if(*array[i] == '\0')
break;
}
n = i;
for(i=0; i < n; ++i){
puts(array[i]);
free(array[i]);
}
return 0;
}
void insert(char *arrayPTR[N], int i){
int ch, count = 0;
char *string = malloc(1);
printf("Enter the string: ");
while(EOF!=(ch=getchar()) && ch != '\n'){
string = realloc(string, count + 2);//Size expansion
string[count++] = ch;
}
string[count] = '\0';
arrayPTR[i] = string;
}