我有一个给定大小的数组,没有使用任何内存分配,如何在其中添加内容?
假设我运行代码,等待你要输入的内容,输入"bond"
,如何将其附加到数组中? A [10]?
答案 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);
}
#include <stdio.h>
函数来创建一个新字符串,并且可以实现我自己的快速列表或数组。
答案 3 :(得分:0)
数组变量的大小无法更改。追加到数组的唯一方法是使用内存分配。您正在寻找realloc()
功能。
答案 4 :(得分:0)
如果要向其添加字符或字符串;
strcpy(a, "james")
strcpy(a, "bond")