在C中追加到数组中

时间:2015-04-17 12:37:34

标签: c arrays append

我有一个给定大小的数组,没有使用任何内存分配,如何在其中添加内容?

假设我运行代码,等待你要输入的内容,输入"bond",如何将其附加到数组中? A [10]?

5 个答案:

答案 0 :(得分:6)

如果数组声明为

char A[10];

然后你可以用以下方式为它指定字符串“bond”

#include <string.h>

//...

strcpy( A, "bond" );

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

#include <string.h>

//...

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

答案 1 :(得分:2)

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

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

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

答案 2 :(得分:1)

您好,

这实际上取决于你追加的意思。

...
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.

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

  • 你错误判断了你需要的尺寸吗?在这种情况下,只需确保您提到的这个给定尺寸是正确的,但这可能是。
  • 或者你不知道一开始你想要多少空间?在这种情况下,您必须自己分配内存!如果我可以说,没有其他方法可以动态调整内存块动态

    #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标准库#include <stdio.h>函数来创建一个新字符串,并且可以实现我自己的快速列表或数组。

答案 3 :(得分:0)

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

答案 4 :(得分:0)

如果要向其添加字符或字符串;

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