[英]Printf function prints another string too
嗨,我是 C 语言的新手,我试图理解这些字符串。 据我所知,字符串只是一个字符数组, char a[]= "car"
和char a[] = {'c','a','r'}
之间应该没有区别。
当我尝试将字符串打印为:
char a[] = "car";
char b[] = "testing the cars";
printf("%s", a);
output 只是汽车,没有问题。但是当我尝试将其打印为:
char a[] = {'c','a','r'};
char b[] = "testing the cars";
printf("%s", a);
它也在打印 b 。 你能解释一下这是什么原因吗?
printf()
的%s
说明符需要一个指向空终止字符串的char*
指针。
在第一种情况下, a
和b
都是空终止的。 使用字符串文字初始化未指定大小的char[]
数组将在末尾包含文字的空终止符'\0'
字符。 因此:
char a[] = "car";
相当于:
char a[] = {'c', 'a', 'r', '\0'};
在第二种情况下, a
不是空终止的,导致未定义的行为,因为printf("%s", a)
将读过a
的末尾进入周围的 memory,直到它最终找到一个'\0'
字符。 碰巧的是,在您的情况下, b
存在于 a 之后a
memory 中,但这并不能保证,编译器可以将b
放在它想要的任何位置。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.