首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Sizeof vs Strlen

Sizeof vs Strlen
EN

Stack Overflow用户
提问于 2012-03-30 12:52:29
回答 4查看 55.3K关注 0票数 44
代码语言:javascript
复制
#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;
}

输出:

代码语言:javascript
复制
$ ./a.out
the size of september is 8 and the length is 9

我的语法有什么问题吗?

EN

回答 4

Stack Overflow用户

发布于 2012-03-30 12:59:27

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

代码语言:javascript
复制
char string[] = "october";

等同于

代码语言:javascript
复制
char string[8] = "october";

所以编译器可以判断出string的大小是8,它在编译时就是这么做的。

但是,strlen()在运行时计算字符串中的字符数。因此,在调用strcpy()之后,string现在包含“9月”。strlen()计算了字符并找到了其中的9个。请注意,您没有为string分配足够的空间来容纳“9月”。这是未定义的行为。

票数 41
EN

Stack Overflow用户

发布于 2012-03-30 13:05:50

输出是正确的,因为

第一个语句字符串大小是由编译器分配的,它是7+1 (10月是7个字节,编译时为空终止符1个字节)

第二条语句:您正在复制9月(9字节到8字节的字符串);

9月份的大小是8个字节( strlen()在9月份仍然不起作用,因为它没有空字符)

票数 2
EN

Stack Overflow用户

发布于 2012-03-30 12:57:06

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

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

请告诉我你真正想做什么,因为这很难闻。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9937181

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档