如何正确使用 strcat 作为 char 数组?

How do I properly use strcat for char array?

我正在尝试将另一个字符串连接到 arg[0]。

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

int main() {

    char* arg[] = {
        "Hello",
        NULL,
        NULL,
        NULL
    };

    strcat(arg[0], " World");

}

这个 returns 中止陷阱。

我做错了什么?

C 字符串的缺点之一是您需要提前知道它们有多大。

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

int main() {
    char arg[1024] = "Hello";
    strcat(arg, " World");
    printf("%s\n", arg);
}

在这种情况下,连接字符串的大小必须小于 1024 个字符。这就是为什么使用像 C++ 这样的东西更安全的原因,因为你可以 std::string 来防止这些类型的问题。

您正在尝试使用以下内容重写 string literal

char* arg[] = { "Hello", ..... };    // "Hello" is a string literal, pointed to by "arg[0]".

strcat(arg[0], " World");       // Attempt to rewrite/modify a string literal.

这是不可能的。

字符串文字只能读,不能写。这就是他们 "literal".

的原因

如果您想知道为什么:

char* arg[] = { "Hello", ..... }; 

暗示 "Hello" 作为字符串文字,您应该阅读该问题的答案:

What is the difference between char s[] and char *s?


顺便说一下,如果你这样做的话,那甚至是不可能的(或者至少在 运行 时出现分段错误):

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

int main() {

    char a[] = "Hello";  // 6 for holding "Hello" (5) + "[=12=]" (1). 

    strcat(a, " World");   

}

因为数组 a 需要 12 个字符来连接两个字符串并使用 strcat(a, " World"); - "Hello"(5 个字符)+ " World"(6 个字符)+ [=18=](1个字符)但它只有6个字符来容纳"Hello" + [=18=]。使用 strcat().

时,没有内存 space 自动添加到数组中

如果您使用这些语句执行程序,您将超出 Undefined Behavior 数组的边界,这可能会提示您出现分段错误。