#include <stdio.h>
#include <string.h>
int main(int argc, char *argv[]) {
char string[] = "october"; // 7 letters
strcpy(string, "september"); // 9 letters
printf("the size of %s is %d and the length is %d\n\n", string,
sizeof(string), strlen(string));
return 0;
}输出:
$ ./a.out
the size of september is 8 and the length is 9我的语法有什么问题吗?
发布于 2012-03-30 12:59:27
sizeof和strlen()做不同的事情。在这种情况下,您的声明
char string[] = "october";等同于
char string[8] = "october";所以编译器可以判断出string的大小是8,它在编译时就是这么做的。
但是,strlen()在运行时计算字符串中的字符数。因此,在调用strcpy()之后,string现在包含“9月”。strlen()计算了字符并找到了其中的9个。请注意,您没有为string分配足够的空间来容纳“9月”。这是未定义的行为。
发布于 2012-03-30 13:05:50
输出是正确的,因为
第一个语句字符串大小是由编译器分配的,它是7+1 (10月是7个字节,编译时为空终止符1个字节)
第二条语句:您正在复制9月(9字节到8字节的字符串);
9月份的大小是8个字节( strlen()在9月份仍然不起作用,因为它没有空字符)
发布于 2012-03-30 12:57:06
您的目标数组是8个字节(长度为“十月”加上\0),并且您希望在该数组中放入9个字符。
man strcpy说:如果strcpy()的目标字符串不够大,那么任何事情都可能发生。
请告诉我你真正想做什么,因为这很难闻。
https://stackoverflow.com/questions/9937181
复制相似问题