指针数组-在同一位置创建的临时数组会更改先前保存的内容值

问题描述 投票:0回答:1

[我正在尝试编写一个程序,该程序可以接受用户的输入(名字,姓氏,分数),并在接受所有这样的输入后将其打印出来。

fname1 lname1 : 99
fname2 lname2 : 23
fname3 lname3 : 29
//Note that all of them are input 

我编写了以下程序,它可以工作,但是将最后一次输入打印n次。我知道问题出在哪里,但不知道如何解决。 每次都会在完全相同的位置创建临时数组变量,并使所有元素相同。 如何解决?

#include <stdio.h>
#define LENGTH 3

int main() {
    int *score[LENGTH];
    char *fname[LENGTH];
    char *lname[LENGTH];

    for(int i = 0; i < LENGTH; i++){
        printf("Enter name and score of batter %d: ",i);
        char ftemp[10];
        char ltemp[10];
        int tempScore;

        scanf("%s %s %d", ftemp, ltemp, &tempScore);
        fname[i] = ftemp;
        lname[i] = ltemp;
        score[i] = &tempScore;
    }

    for(int i = 0; i < LENGTH; i++){
        printf("%s %s %d\n", fname[i], lname[i], *score[i]);
    }
} 
c arrays pointers scanf
1个回答
0
投票

我认为您正在尝试将对局部变量的引用分配给score,fname和lname。您不能这样做,因为它会在退出其作用域时被破坏,而不是尝试此操作

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define LENGTH 3

int main() {
    int *score[LENGTH];
    char *fname[LENGTH];
    char *lname[LENGTH];

    for(int i = 0; i < LENGTH; i++){
        printf("Enter name and score of batter %d: ",i+1);
        char ftemp[10];
        char ltemp[10];
        int tempScore;

        scanf("%s %s %d", ftemp, ltemp, &tempScore);
        fname[i] = malloc(strlen(ftemp));
        lname[i] = malloc(strlen(ltemp));
        score[i] = malloc(sizeof(int));

        if(fname[i]==NULL||lname[i]==NULL||score[i]==NULL)
        {
            printf("Memory Error");
            exit(1);
        }
        else
        {
            strcpy(fname[i],ftemp);
            strcpy(lname[i],ltemp);
            *score[i]=tempScore;
        }
    }

    for(int i = 0; i < LENGTH; i++){
        printf("%s %s %d\n", fname[i], lname[i], *score[i]);
   }
}
© www.soinside.com 2019 - 2024. All rights reserved.