2

可能重复:
如何在 C 中创建字符串数组?

在我的最后一个问题中,我编写了以下代码行

#include <stdio.h>
int main(void){
  char str1[] = {'f','i'};
  char str2[] = {'s','e'};
  char str3[] = {'t','h'};
  char *arry_of_string[] = {str1,str2,str3};
  printf("%s\n",arry_of_string[1]);
}  

感谢人们指出我应该在字符串末尾的 '\0' 处。我学会了正确的方法来做到这一点。我很好奇错误代码的结果:

sefi

我记得在 C 参考书中,寻找 '\0' 的指针我认为没有\0终止符,结果应该是:

seth 因为 str3 是数组中的下一个元素。任何人都可以解释为什么它是数组的内部结构?

4

1 回答 1

0

C 不对内存中变量的顺序做出任何保证。但是,它确实保证结构成员按顺序排列在内存中,第一个成员位于结构的偏移量 0 处。

所以你正在做的是测试未定义的行为,它可能会随着编译器版本、编译选项甚至月相而随时改变。不要依赖未定义的行为。不要对编译器进行逆向工程。大多数无用的知识在你的简历长得太长之前就会过时,并且只会在你将来不得不与其他编译器打交道时引起惊喜。

如果您想了解 C 的工作原理,请阅读唯一的权威资料ISO C 标准。不接受任何替代品(除了也许,Kernighan, Ritchie,“ The C Programming Language , 2nd ed.”

于 2012-07-27T12:41:50.523 回答