我知道C中的字符串只是字符数组。因此,我尝试了以下代码,但给出了奇怪的结果,例如垃圾输出或程序崩溃:
#include <stdio.h>
int main (void)
{
char str [5] = "hello";
puts(str);
}
Run Code Online (Sandbox Code Playgroud)
为什么不起作用?
它可以用干净地编译gcc -std=c17 -pedantic-errors -Wall -Wextra。
注意:对于在声明字符串时未能为NUL终止符分配空间而引起的问题,本帖子旨在用作规范的FAQ。
被一个问题困扰了strlen很久,代码如下:
char stack_protect[1000] = {0};
char temp[100] = { 0 };
memset(&temp, 1, 110);
int len = strlen(temp);
printf("test strlen of temp %d \n", len);
if (len > 100)
{
xxxx;
}
else
{
xxxx;
}
char stack_protect2[1000] = {0};
Run Code Online (Sandbox Code Playgroud)
你可以看到,我传递了一个参数temp给strlen,返回值len肯定是110。但接下来的语句if (len > 100)评估结果为 false!
系统:linux
CPU架构:32位ARM SOC:nt98566
请帮我!谢谢
我有测试的东西:
len给另一个int变量赋值,事情就会好起来。像下面这样例子:
char temp[100] = { 0 };
memset(&temp, 1, 110);
int len = …Run Code Online (Sandbox Code Playgroud)