如何使用预定义指向字符串的指针初始化指针数组。请有人帮助我,并向我解释其背后的逻辑。提前谢谢,感谢您的帮助。
char *str1 = NULL, *str2 = NULL, *str3 = NULL ;
char *array[n]={str1, str2, str3};
int n=3;
printf("\n\t\t\t *** Zeile als Zeichenkette einlesen *** \n");
for(int i=0;i<n ;i++) {
printf("Die eingelesene Zeichenkette ist : %s \n", array[i] [0]=zeichenketteEinlesen());
printf("test %s \n",str1);
free(str1);
}
这是我的整个计划
char* zeichenketteEinlesen(void){
int i=0;
char c ;
char *Z_Kette = NULL ;
Z_Kette = (char*)malloc(sizeof(char)) ;
if(NULL == Z_Kette) {
printf("Kein virtueller RAM mehr verfuegbar ...\n");
return EXIT_FAILURE;
}
printf("Geben Sie Die Zeichenkette ein bitte ! :");
while ( (c = getchar()) != '\n' ){
Z_Kette=(char*)realloc(Z_Kette, (i+2)*sizeof(char));
if(NULL == Z_Kette) {
printf("Kein virtueller RAM mehr verfuegbar ...\n");
return EXIT_FAILURE;
}
Z_Kette [i++] = (char)c ;
}
Z_Kette[i] = '\0' ;
return Z_Kette ;
}
int main()
{
char *str1 = NULL, *str2 = NULL, *str3 = NULL ;
char *array[n]={str1, str2, str3};
int n=3;
printf("\n\t\t\t *** Zeile als Zeichenkette einlesen *** \n");
for(int i=0;i<n ;i++) {
printf("Die eingelesene Zeichenkette ist : %s \n", array[i][0]=zeichenketteEinlesen());
printf("test %s \n",str1);
free(str1);
}
getchar();
return 0;
}
答案 0 :(得分:0)
char *str1 = NULL, *str2 = NULL, *str3 = NULL ;
char *array[n]={str1, str2, str3};
int n=3;
下面是我的代码(我重构了格式以便更好看):
#include <stdio.h>
#include <stdlib.h>
char* zeichenketteEinlesen(void){
int i=0;
char c ;
char *Z_Kette = NULL ;
Z_Kette = (char*)malloc(sizeof(char)) ;
if(NULL == Z_Kette) {
printf("Kein virtueller RAM mehr verfuegbar ...\n");
// incompatible return type
exit(EXIT_FAILURE);
}
printf("Geben Sie Die Zeichenkette ein bitte ! :");
while ( (c = getchar()) != '\n' ){
Z_Kette=(char*)realloc(Z_Kette, (i+2)*sizeof(char));
if(NULL == Z_Kette) {
printf("Kein virtueller RAM mehr verfuegbar ...\n");
// incompatible return type too
exit(EXIT_FAILURE);
}
Z_Kette [i++] = (char)c ;
}
Z_Kette[i] = '\0' ;
return Z_Kette ;
}
int main() {
char *str1 = NULL, *str2 = NULL, *str3 = NULL ;
// logic error, what you want is to change strx, while in your way it changes array elements.
char **array[3]={&str1, &str2, &str3};
int n=3;
printf("\n\t\t\t *** Zeile als Zeichenkette einlesen *** \n");
for(int i=0;i<n ;i++){
// you should not use array[i][0], since array[i] is not an array
printf("Die eingelesene Zeichenkette ist : %s \n", *(array[i])=zeichenketteEinlesen());
// here, you should use / free an appropriate pointer in every loop cycle.
// (but below is not a good way to do this, you can improve it)
if (i == 0) {
printf("test %s \n",str1);
free(str1);
} else if (i == 1) {
printf("test %s \n",str2);
free(str2);
} else {
printf("test %s \n",str3);
free(str3);
}
}
getchar();
return 0;
}