user-0 提问: 一个简单的指针问题

回复:
user: user-0
content: 谢谢大家的帮忙 小弟分少，抱歉了

user: user-1
content: 引用 11 楼 wanren13 的回复:谢谢大家的帮忙，之前的问题已经解决，现在又有了新问题       NUM_OF_CARD = 52;   NUM_NUM = 13;   SUITS_NUM = 4;    const char *suits[] = {"Clubs\0", "Diamonds\0", "Hearts\0", "Spades\0"};   const char *numbers[] = {"A\0", "2\0", "3\0", "4\0", "5\0", "6\0", "7\0",                     "8\0", "9\0", "10\0", "J\0", "Q\0", "K\0"};   static char *cards[NUM_OF_CARD];    int i, s, n;    for (i = 0; i < NUM_OF_CARD; i++){     s = i / NUM_NUM;     n = i / SUITS_NUM;     strcpy(cards[i], suits[s]);     strcat(cards[i], " ");     strcat(cards[i], numbers[n]);   }   为什么会有segmentation fault?? 这个是指针错误，你看下指针部分的。。。你的cards[i]是一个字符串指针，相当于你用一个char *string;strcpy(string,suits[s]);这个当然会报错，你只有一个指针，并没有空间来存放字符串的。

user: user-0
content: 谢谢大家的帮忙，之前的问题已经解决，现在又有了新问题       NUM_OF_CARD = 52;   NUM_NUM = 13;   SUITS_NUM = 4;    const char *suits[] = {"Clubs\0", "Diamonds\0", "Hearts\0", "Spades\0"};   const char *numbers[] = {"A\0", "2\0", "3\0", "4\0", "5\0", "6\0", "7\0",                     "8\0", "9\0", "10\0", "J\0", "Q\0", "K\0"};   static char *cards[NUM_OF_CARD];    int i, s, n;    for (i = 0; i < NUM_OF_CARD; i++){     s = i / NUM_NUM;     n = i / SUITS_NUM;     strcpy(cards[i], suits[s]);     strcat(cards[i], " ");     strcat(cards[i], numbers[n]);   }   为什么会有segmentation fault??

user: user-2
content: 引用 楼主 wanren13 的回复:以下代码问题到底出在哪？该如何解决？   char **suits = {"clubes\0",  "Diamonds\0", "Hearts\0", "Spades\0"}; //这里需要加\0吗？  for (i = 0; i < sizeof(suits); i++){     printf("%s ", suits);     suits++;   }  {}这种初始化方式用于数组初始化。

user: user-3
content: char *suits[]或者char* suits[]，表示suits是一个数组，数组元素的类型是char*

user: user-4
content: sizeof(suits) 得到的是指针的大小为4吧， for (i = 0; i < sizeof(suits); i++){     printf("%s ", suits);     suits++;    } 输出会乱了吧

user: user-5
content: 数组在使用时，数组名可以隐式转化为指向第一个元素的指针 如果你因为这个隐式转换就以为数组和指针是同一种东西，我只能说请从头复习基础知识

user: user-6
content: 引用 5 楼 wanren13 的回复:[quote=引用 4 楼 u012348978 的回复:] char **suits 这只是一个指针变量。  他不是指针数组，你不能这样赋值。  这样。char *suits[] = {"clubes\0",  "Diamonds\0", "Hearts\0", "Spades\0"};   指针是一种强类型，对类型的要求非常严格。所以认识指针是一个漫长的过程，心急不得。  没改之前还能显示第一个string。。。 改完连一个都显示不出来了。。。 而且还有segmentation fault。。。[/quote]  char *suits[] = {"clubes\0",  "Diamonds\0", "Hearts\0", "Spades\0"}; //这里需要加\0吗？     for (int i = 0; i < 4/*这个指针学得不好，没有想出一个动态计算的办法*/; i++){     printf("%s ", suits[i]);     //suits++;这是一个数组，所以是一个，把指针保存到指针的错误     }

user: user-0
content: 引用 4 楼 u012348978 的回复:char **suits 这只是一个指针变量。  他不是指针数组，你不能这样赋值。  这样。char *suits[] = {"clubes\0",  "Diamonds\0", "Hearts\0", "Spades\0"};   指针是一种强类型，对类型的要求非常严格。所以认识指针是一个漫长的过程，心急不得。  没改之前还能显示第一个string。。。 改完连一个都显示不出来了。。。 而且还有segmentation fault。。。

user: user-6
content: char **suits 这只是一个指针变量。  他不是指针数组，你不能这样赋值。  这样。char *suits[] = {"clubes\0",  "Diamonds\0", "Hearts\0", "Spades\0"};   指针是一种强类型，对类型的要求非常严格。所以认识指针是一个漫长的过程，心急不得。

user: user-0
content: 引用 1 楼 user-8 的回复: char *suitsp[] = {"clubes\0",  "Diamonds\0", "Hearts\0", "Spades\0"};   *suits[] 和 **suits 有什么区别？？？

user: user-7
content: 1.这样初始化的话  应该也可以吧，用\0吗 取决于你用里面的字符串干什么，printf %s是怎么处理字符串的 2.sizeof的用法不对

user: user-8
content: char *suitsp[] = {"clubes\0",  "Diamonds\0", "Hearts\0", "Spades\0"};