如何用预定义的字符串指针初始化指针数组。请有人帮助我并向我解释其背后的逻辑。预先感谢您,感谢您的帮助。
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;
}
最佳答案
char *str1 = NULL, *str2 = NULL, *str3 = NULL ;
char *array[n]={str1, str2, str3};
int n=3;
- 您应该使用常量(例如 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;
}
关于c - 使用预定义的字符串指针初始化指针数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49651929/