c - 使用预定义的字符串指针初始化指针数组?

标签 c arrays pointers

如何用预定义的字符串指针初始化指针数组。请有人帮助我并向我解释其背后的逻辑。预先感谢您,感谢您的帮助。

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;
  1. 您应该使用常量(例如 3)初始化数组,而不是变量。
  2. 以这种方式定义数组在语法上是可以的,尽管在逻辑上不正确。

下面是我的代码(我重构了格式以获得更好的外观):

#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/

相关文章:

C 编程 undefined reference `WinMain@16'

C 指针示例 - 这有什么不好的?

c++ - Qt - 返回 qint32 数组的数组

java - LinkedList 对象 add() 函数不更新值 - java

c - 为整个地址空间设置保护位

c - C 中奇怪的段错误

javascript - 数组值不正确

python - 如何在Python中的for循环中将数组值分配给列表

c - 将列表传递给函数以在 C 中用可变数量的成员填充列表