如何将字符串复制到字符数组指针中?

问题描述 投票:0回答:3

我是 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};
.

arrays c pointers initialization string-literals
3个回答
1
投票

你只需分配给数组索引:

args[3] = a;
args[4] = NULL;

1
投票

要么在数组声明中包含指针

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;

0
投票
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
}
© www.soinside.com 2019 - 2024. All rights reserved.