gpt4 book ai didi

尽管没有空终止字符串,但行为是否正确?

转载 作者:行者123 更新时间:2023-11-30 19:13:16 25 4
gpt4 key购买 nike

这是我的代码:

#include <string.h>
#include <strings.h>
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char ** argv) {
char some_string[4] = "ball";
char * pointer = malloc(sizeof(char) * 4);
strncpy(pointer, some_string, sizeof(char) * 4);
printf("String is %s\n", some_string);
printf("String in the pointer is %s\n", pointer);
return 0;
}

这里我特意声明了一个大小为 4 的 char 数组,并且没有为 null 终止符留下空间。每当我打印出来时,我都会在其末尾附加奇怪的(无法打印的)值(如预期的那样)。但是,我也期望 pointer 变量有同样的结果,因为它应该缺少 null 终止符(因为它只有 4 个 char 的空间,所以没有 的空间\0。但是,每当我运行此代码时,some_string 总是很困惑,但在大约 50 次尝试后,pointer 完全没问题,尽管(从我看来) ) 没有空终止符。这是为什么?

最佳答案

printf() 中的

%s 格式说明符需要一个以 null 结尾的字符串。

在这种情况下,您有未定义的行为(UB)。有时 UB 会给出预期的结果。

旁注:

sizeof(char) 是所有平台上的常量(1 字节),因此无需在内存分配期间指定它。

关于尽管没有空终止字符串,但行为是否正确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35738983/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com