2015-01-07 37 views
-2

在我的代碼文件是結構。如何正確訪問C中的數組成員?

typedef struct { 
    char name[64]; 
    char filename[64]; 
    long size; // file size 
    long loaded; // after load of kernel loaded should be same value as size 
    char * program; 
} FILES; 

文件是FILES類型的數組。

FILES files[MAX_KERNELS_COUNT]; 

in function loadKernels我想通過指針訪問數組文件的成員。

bool loadKernels(const char * path, FILES * files, int count) 
{ 
... 
size = strlen(files[c].program); 
printf("\n%ld\n",size); 
size = sizeof(files[c].program); 
printf("\n%ld\n",size); 
... 
} 

我有問題那裏的文件[c] .program行。我知道我必須像指針一樣訪問文件,但是如何正確地獲取C字符串的長度?我知道像(*文件)[C]。程序是錯誤的。

+2

你已經在正確地做它,直接後來你做錯了。要獲得一個字符串的長度,你可以使用'strlen'來獲得你使用'sizeof'指針*的大小*(而不是它指向的)。 –

+0

如何獲得'string'的長度與你如何訪問數組無關,函數接收到的是指向數組第一個元素的指針,所以假設'c

+0

所以這是正確的,但我期望得到不同的結果。這就是爲什麼我認爲這是錯誤的:我期望程序的長度爲11000字節。但它只有7個字節。根據Code :: blocks監視工具字符串是:0x4c66b0「\ 177ELF \ 001 \ 001 \ 001」,,,似乎我的功能有一些問題。 – user1141649

回答

1

filesFILES的數組。

files[c]因此類型的FILES

files[c].program因此char *類型。

因此strlen(files[c].program)應該給你你想要的,即字符串的長度(而不是指針的大小)。注strlen將排除終止NUL,即字符串的大小將會增加一個字節。

0
size = strlen(files[c].program); 
printf("\n%ld\n",size); 
size = sizeof(files[c].program); //<-- Here you are using the sizeof. change this into strlen 
printf("\n%ld\n",size); 

Sizeof給你sizeof給定的變量。它不會給你字符串的長度。

+0

用'strlen'改變'sizeof'是沒有意義的,可能正確的做法是完全刪除該行。 –

0

我有問題那裏的文件[c] .program行。我知道我 必須像指針訪問文件,但如何正確地獲得 C字符串的長度?我知道類似(*文件)[c]。程序 是錯誤的。

沒有字符串

程序是一個指向某處陣列外部。