#include "stdio.h"
#include "string.h"
main()
{
char string[] = "october"; // october is 7 letters
strcpy(string, "september"); // september is 9 letters
printf("the size of %s is %d and the length is %d\n\n", string, sizeof(string), strlen(string));
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出:
9月的大小是8,长度是9
我的语法有什么问题或者是什么?
Sea*_*ean 40
sizeof并strlen()做不同的事情.在这种情况下,您的声明
char string[] = "october";
Run Code Online (Sandbox Code Playgroud)
是相同的
char string[8] = "october";
Run Code Online (Sandbox Code Playgroud)
所以编译器可以告诉大小string为8.它在编译时执行此操作.
但是,strlen()在运行时计算字符串中的字符数.所以,你打电话后strcpy(),string现在包含"九月". strlen()对字符进行计数并找到其中的9个.请注意,您没有分配足够的空间string来容纳"9月".这是未定义的行为.
您的目标数组是 8 个字节(“十月”的长度加上 \0),并且您想在该数组中放入 9 个字符。
man strcpy说:如果 strcpy() 的目标字符串不够大,那么任何事情都可能发生。
请告诉我你到底想做什么,因为这味道很臭