【问题标题】:Char array print more than I wanted in CChar 数组打印比我在 C 中想要的更多
【发布时间】:2019-02-20 03:06:11
【问题描述】:

为什么它会在字符数组命令的末尾打印额外的“COMMAND /desktop/document/myfilename”?

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

int main() {
    char c_header[] = "COMMAND /desktop/document/myfilename \r\n\r\n";

    char command[8];

    for (size_t i = 0; i < 8 ; i++){
        command[i] = c_header[i];
    }
    command[7] = 's';

    printf( "command =%s\n", command);

}

输出

command =COMMANDsCOMMAND /desktop/document/myfilename 

Process finished with exit code 0

【问题讨论】:

  • 你永远不会用'\0'终止你的字符串
  • No '\0' in command:没有它就不是字符串。您不能将它作为字符串与需要字符串的库函数一起使用。

标签: c arrays char printf


【解决方案1】:

中的字符串由 \0 终止。如果您尝试将未被\0 终止的字符数组视为字符串(例如,printfing 它),它只会溢出,直到您点击恰好在您的堆中的下一个\0 .

长话短说,您需要明确确保字符串末尾有 \0

/* Added an extra char for the '\0' */
char command[9]; 

for (size_t i = 0; i < 8 ; i++){
    command[i] = c_header[i];
}
command[7] = 's';
command[8] = '\0';

【讨论】:

  • 我怀疑这个问题可能有一两个重复:((
【解决方案2】:

您需要以&lt;'\0'&gt; or NULL 或整数0 结束字符串。

【讨论】:

  • NULL 是一个空指针,而不是属于字符串末尾的空终止符。
猜你喜欢
  • 1970-01-01
  • 2020-10-04
  • 1970-01-01
  • 1970-01-01
  • 2012-11-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多