相关疑难解决方法(0)

字符数组应如何用作字符串?

我知道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。

c string c-strings string-literals nul

10
推荐指数
2
解决办法
320
查看次数

当strlen的参数是非零结尾的字符串时,其返回值在IF语句中不安全?

被一个问题困扰了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)

你可以看到,我传递了一个参数tempstrlen,返回值len肯定是110。但接下来的语句if (len > 100)评估结果为 false!

系统:linux
CPU架构:32位ARM SOC:nt98566

请帮我!谢谢

我有测试的东西:

  1. 如果你len给另一个int变量赋值,事情就会好起来。像下面这样

例子:

    char temp[100] = { 0 };
    memset(&temp, 1, 110);
    int len = …
Run Code Online (Sandbox Code Playgroud)

c linux strlen

0
推荐指数
1
解决办法
133
查看次数

标签 统计

c ×2

c-strings ×1

linux ×1

nul ×1

string ×1

string-literals ×1

strlen ×1