将元素附加到C中的字符串数组中

Appending element into an array of strings in C

我有一个给定大小的字符串数组,没有使用任何内存分配,我如何向其中追加一些东西?

说我 运行 代码,它在等待你要输入的东西,你输入 "bond",我如何将它追加到数组中?一个[10]?

数组变量的大小不能改变。附加到数组的唯一方法是使用内存分配。您正在寻找 realloc() 函数。

您不能附加到数组。当您定义数组变量时,C 会要求 is 提供足够的连续内存。这就是你所有的记忆。您可以修改数组的元素 (A[10]=5) 但不能修改大小。

但是,您可以创建允许追加的数据结构。最常见的两种是链表和动态数组。请注意,这些都没有内置到语言中。您必须自己实现它们或使用库。 Python、Ruby 和 JavaScript 的列表和数组实现为动态数组。

LearnCThHardWay 有一个关于链表的很好的教程,尽管关于动态数组的教程有点粗糙。

如果数组声明为

char A[10];

然后你可以通过以下方式将字符串 "bond" 分配给它

#include <string.h>

//...

strcpy( A, "bond" );

如果你想用其他字符串附加数组,那么你可以写

#include <string.h>

//...

strcpy( A, "bond" );
strcat( A, " john" );

嗨,

这真的取决于你所说的追加是什么意思。

...
int tab[5]; // Your tab, with given size
// Fill the tab, however suits you.
// You then realize at some point you needed more room in the array
tab[6] = 5; // You CAN'T do that, obviously. Memory is not allocated.

这里的问题可能是两件事:

  • 您是否误判了您需要的尺码?在那种情况下,只需确保您提到的这个给定大小是正确的 'given',但可能是这样。
  • 或者你一开始不知道你想要多少空间?在那种情况下,您将不得不自己分配内存!如果我可以说的话,没有其他方法可以即时调整内存块的大小。

<pre> <code>#include <stdio.h> #include <stdlib.h> #include <string.h> #define STR_MAX_SIZE 255 // Maximum size for a string. Completely arbitray.
char *new_string(char *str) { char *ret; // The future new string;
ret = (char *) malloc(sizeof(char) * 255); // Allocate the string strcpy(ret, str); // Function from the C string.h standard library return (ret); }
int main() { char *strings[STR_MAX_SIZE]; // Your array char in[255]; // The current buffer int i = 0, j = 0; // iterators
while (in[0] != 'q') { printf("Hi ! Enter smth :\n"); scanf("%s", in); strings[i] = new_string(in); // Creation of the new string, with call to malloc i++; } for ( ; j < i ; j++) { printf("Tab[ %d ] :\t%s\n", j, strings[j]); // Display free(strings[j]); // Memory released. Important, your program // should free every bit it malloc's before exiting }
return (0); }


这是我能想到的最简单的解决方案。它可能不是最好的,但我只是想向您展示整个过程。我本可以使用 C 标准库 strdup(char *str) 函数来创建一个新字符串,并且可以实现我自己的快速列表或数组。

如果要在其后附加一个字符或字符串;

strcpy(a, "james")
strcpy(a, "bond")