字符串分段故障

时间:2016-04-08 13:54:40

标签: c arrays pointers

我正在玩一个简单的c代码。我想在days数组指针中打印所有日期字符串。但是我正在运行分段故障。问题在于for循环。我在这做错了什么。感谢

main(){
  const char *days[] = {"Sunday", "Monday", "Tuesday", "Wednesday",\
                        "Thursday", "Friday", "Saturday", "Sunday"};
  int i;

  for(i = 0; i < sizeof(days); ++i)
   printf( "%s\n", days[i]);
}

2 个答案:

答案 0 :(得分:2)

int main(){
  const char *days[] = {"Sunday", "Monday", "Tuesday", "Wednesday",\
                        "Thursday", "Friday", "Saturday", "Sunday"};
  size_t i;
  for(i = 0; i < sizeof days / sizeof days[0]; ++i)
   printf( "%s\n", days[i]);
}

sizeof day产生整个数组的大小,因此你必须将其除以其中一个元素的大小以获得它所包含的元素数。

答案 1 :(得分:2)

for语句更改为

for( i = 0; i < ( sizeof(days)/sizeof(days[0]) ); ++i )

sizeof表达式为您提供数组中元素的数量,而不是它所需的字节数

执行此操作的经典方法是宏

#define SIZEOF( X ) ( sizeof( X )/sizeof( X[0]) )

然后使用SIZEOF代替sizeof