如何正确使用 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 数组的边界,这可能会提示您出现分段错误。
我正在尝试将另一个字符串连接到 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()
.
如果您使用这些语句执行程序,您将超出 Undefined Behavior 数组的边界,这可能会提示您出现分段错误。