c - 如果不在字符串末尾使用\0,在 C 语言中会发生什么情况?

标签 c

<分区>

所以我知道在 C 中,'\0' 是空字符,用于终止字符串。我一直在网上查看它的实际作用,并且我在我的字符串中运行了有和没有它的程序,以了解它的使用和不使用的区别。我找不到任何。

当我的字符串缺少 '\0' 字符时,我不能做什么?

没有\0 对我有用的代码:

char a[10] = {'a','b','c','d','e','f','g'};
int x = strlen(a);
char b[10] = {'h','i','j','k','l'};
int y = strcmp(a,b);
printf("%d\n",x);
printf("%d\n",y);

最佳答案

根据标准(C11 §7.1.1),如果它不是以空字节结尾,那么从技术上讲它不是“字符串”,它只是一个字符数组。 (毫无疑问,c 字符串也是 char 数组,但它们以终止符结尾。)

您将无法使用许多字符串函数 strcatstrcmpstrcpystrlenprintf 等,没有很多您自己的内置保护措施。请注意,如果您手动跟踪字符串的长度并使用 memcpystrnlensprintf 等函数,则可以执行类似的操作,但这样做时您在技术上并没有使用 c 字符串,您只是在使用数组。

关于c - 如果不在字符串末尾使用\0,在 C 语言中会发生什么情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52323643/

相关文章:

导入库可以同时包含 stub 和静态代码吗?

c - printf 不打印到屏幕

c - 对数组 C 中的元素进行排序

c - 将二叉树变成每个节点下面所有节点之和的函数;如果我不创建新的二叉树,则会出现段错误

c - c 中的 If 和 Else 语句不起作用

C#pragma 是预处理还是编译时操作?

c - 使用 SSE 时性能变差(整数数组的简单相加)

c - 位读取器在连续非 8 倍数读取时失败

c++ - C 语言还在游戏引擎中被广泛使用吗?

CRC计算