【发布时间】:2021-11-14 13:45:07
【问题描述】:
// Online C compiler to run C program online
#include <stdio.h>
#include <stdlib.h>
char* word(char w[]) {
char *temp = w;
return temp;
}
char** tokens() {
char *one = word("One");
char *two = word("two");
char *three = word("three");
char *four = word("four");
char *five = word("five");
char *six = word("six");
char *seven = word("seven");
char *eight = word("eight");
char *nine = word("nine");
char *ten = word("ten");
char *eleven = word("ten");
char *twelve = word("ten");
char *thirteen = word("ten");
char *words[13];
words[0] = one;
words[1] = two;
words[2] = three;
words[3] = four;
words[4] = five;
words[5] = six;
words[6] = seven;
words[7] = eight;
words[8] = nine;
words[9] = ten;
words[10] = eleven;
words[11] = twelve;
words[12] = thirteen;
char **pp = words;
return pp;
}
int main() {
// Write C code here
char **pp = (char **)malloc(13 * sizeof(char));
pp = tokens();
for (int i = 0; i < 12; i++) {
printf("%s\n", *pp);
*pp++;
}
// for (; *pp; *pp++) {
// printf("%s\n", *pp);
// }
return 0;
}
我希望代码打印 tokens() 方法中包含的每个单词。但是,在 main() 的 for 循环中,它只打印:一、二、三、四、null,然后得到分段错误。如果我使用注释的 for 循环,它只会打印:一、二、三、四。我是 C 的新手,所以指针仍然很混乱。我会很感激任何帮助。谢谢。
【问题讨论】:
-
函数
word的意义何在?它除了返回它的参数之外什么都不做。 -
我只是在测试一些我知道没有必要的东西。
-
那就别发了。
-
@SebastianSrvn:一般来说,你应该为你的问题提供一个minimal reproducible example,这意味着应该删除所有不必要的东西。就我而言,您不必为这个问题删除它,但对未来的问题这样做会很好。否则,您的问题更有可能被否决。
标签: c pointers memory segmentation-fault