Sizeof vs Strlen

bep*_*ras 40 c sizeof strlen

#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

sizeofstrlen()做不同的事情.在这种情况下,您的声明

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月".这是未定义的行为.


ola*_*son 0

您的目标数组是 8 个字节(“十月”的长度加上 \0),并且您想在该数组中放入 9 个字符。

man strcpy说:如果 strcpy() 的目标字符串不够大,那么任何事情都可能发生。

请告诉我你到底想做什么,因为这味道很臭