2015-06-29 63 views
0

如何以有效的方式迭代我的文件變量?如何迭代字符指針數組

我應該添加NULL作爲我的最後一個值,還是做別的?

char *files[] = 
     { 
      "c1.txt", 
      "r1.txt", 
      "t2.c", 
      "d.cpp", 
     }; 
+2

你可以,是的。 (但我會添加NULL,而不是'NULL')。或者你可以記住,這裏的這個列表有4個條目。或者你使用'sizeof(files)/ sizeof(char *)'。等等 –

+2

你真正的問題是什麼? –

+1

假設通過「解析」你的意思是「迭代」,是的,那是一種選擇。這真的是你的問題嗎? – WhozCraig

回答

1

有幾種可能性。

  • 您可以添加NULL的最後一項,你建議自己
  • 如果數組來自另一個源(如磁盤上的文件),只是讓你正在閱讀的行數的計數器
  • 但是,如果該陣列被在源給定的,其長度是恆定的,則可以只檢查它有多少個元素具有(通過減去行號)
  • 此外,恆定數組的大小是sizeof(files)/sizeof(char*)
+0

但是請注意,如果數組作爲**參數**傳遞給函數,則數組參數會衰減爲指針,並且您不能再在函數中使用'sizeof files/sizeof * files'。 (我知道你知道,這是爲OP) –

0

你也可以這樣定義

#define ARRAY_SIZE(a) (sizeof(a)/sizeof(a[0])) 
... 
int i; 
for(i = 0; i < ARRAY_SIZE(files); i++) 
{ 
    printf("%s\n", files[i]); 
} 

這個宏應該爲任何類型的陣列的工作,不管類型如何。