我是 C 的新手,继承了一些遗留代码,我试图理解并对其进行一些改进。我需要将元素添加到 char 数组指针,但我无法找出正确的语法。在下面的示例中,我想将 a 附加到 args.
char *a = "A";
char *args[10] = {"hello","hi","bye",NULL};
我敢肯定,对于具有更多 C 语言经验的人来说,答案是显而易见的。任何帮助/指点(没有双关语!)将不胜感激!
我试过像下面这样使用 strcat,但是程序挂了。
strcat(*args,a);
我希望得到一个结果
args = {"hello","hi","bye","A",NULL};
.
你只需分配给数组索引:
args[3] = a;
args[4] = NULL;
要么在数组声明中包含指针
a
作为初始值设定项
char *a = "A";
char *args[10] = {"hello","hi","bye", a, NULL};
或
char *args[10] = { "hello","hi","bye", a };
或者在数组声明之后写
char **p = args;
while ( *p ) ++p;
*p = a;
如果在程序的某些部分你不确定数组是否包含一个带有空指针的槽那么你可以写
char **p = args;
while ( p != args + 10 && *p ) ++p;
if ( p != args + 10 ) *p = a;
strcat(*args,a);
这会尝试将
"A"
附加到 "hello"
- 但 "hello"
是一个字符串文字,您不应该尝试更改字符串文字。它们通常存储在只读存储器中,因此如果您尝试这样做,您可能会得到奇怪的、未定义的行为。
Vlad 和 Barmar 演示了将其附加到
char
指针数组的正确方法。这是另一个演示程序:
#include <stdio.h>
#include <string.h>
// print the strings in the NULL terminated char* array:
void print(char *argv[]) {
for (; *argv; ++argv) {
puts(*argv);
}
puts("---");
}
// Add a char* to the char* array:
void add(int argc, char *argv[], char *str) {
// find the first char* pointing at NULL
for (int i = 0; i < argc - 1; ++i) { // -1 to have room for NULL
if (argv[i] == NULL) {
argv[i] = str;
argv[i + 1] = NULL;
return;
}
}
}
#define SIZE(x) (sizeof(x) / sizeof *(x))
int main(void) {
char *a = "A";
char *args[10] = {"hello", "hi", "bye", NULL};
// strcat(*args,a); // UNDEFINED BEHAVIOR
print(args); // hello hi bye
add(SIZE(args), args, a);
print(args); // hello hi bye A
}