簡體   English   中英

更改包含結構打印的數組的值

[英]Changing values of an array containing a struct printing

我想從數組項目訪問名稱字段並打印名稱,但是遇到了麻煩。

我在callInitialize中創建了一個指針“ L”,並將其設置為我命名為“ studentList”的上層結構類型List。

int callInitialize () {

/*Initialize a List*/
List studentList;
List *L;
L = &studentList;
Initialize(L);

#ifdef DEBUG
    printf("L->count after function call Initialize = %d\n", L->count);
    printf("L->items[0].name after function call Initialize = %s\n", studentList.items[0].name);
#endif 

return 0;
}

然后,我調用了Initialize並嘗試設置要測試的值,但這是不正確的。

void Initialize (List *L) {
char test = "I like you";
L->count = 0;
L->items[0].name = test;
}

我不確定為什么L-> items [0] .name = test; 是不合適的。 我收到了不兼容的類型錯誤,但名稱是char,而測試是char?

另外,一旦我更改了該值,我將如何打印該值? 我的想法是,%s是正確的,因為字段名稱的類型為char。 打印在callIntialize上方,作為調試語句。

我的結構聲明:

#define MAXNAMESIZE 20
typedef struct {
char name[MAXNAMESIZE];
int grade;   
} Student;

typedef Student Item;
#define MAXLISTSIZE 4
typedef struct {
Item items[MAXLISTSIZE];
int count;
} List;

感謝您的任何幫助。

在C中進行字符串復制不能那樣工作。 字符串只是字符數組,最后一個使用的字符為空。 因此,要復制字符串,您需要將單個字符從源數組復制到目標數組中的相應元素。 有一些庫函數可以執行此操作,例如strncpy()

因此,您需要更改:

L->items[0].name = test;

..像這樣:

strncpy(L->items[0].name,test,MAXNAMESIZE);
L->items[0].name[MAXNAMESIZE - 1] = '\0';

..其中第二行只是確保結尾處有一個空字符,以防萬一testMAXNAMESIZE

如果Studentname成員已聲明為char *並使用malloc()分配,而不是聲明為char數組,則該分配會起作用,但可能未完成您想要的操作-它將name更改為指向與test相同的字符串(而不是它的副本),只是丟棄了原始值,從而泄漏了malloc() ed內存。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM