我想得到像34,34; 34,21; 45,12; 45,12(长度不确定。)的字符串。 我想用realloc动态内存分配,但我不能这样做。 我怎么能把这个字符变成字符串??
它将是string = {34,34,34,21,45,12,45,12}
答案 0 :(得分:3)
您必须事先知道长度,当您知道缓冲区对于新输入的数据而言太小时,请使用:
realloc(ptr, newLength);
答案 1 :(得分:0)
如果您希望在编译时执行此操作(这是执行类似于您的问题中的初始化程序的唯一方法),您可以让初始化程序定义数组的大小:
char string[] = {34,34,34,21,45,12,45,12, 0}; // added a 0 to the end to
// make it '\0' terminated
// You might not need that
如果您希望字符串从运行时源(文件或其他输入)获取数据,您需要自己执行分配,具体如何操作取决于您将如何获取数据。
以下示例将数据从stdin
读取到动态分配的字符数组中,根据需要增长数组,直到达到EOF。它每次增加20个字节的数组,这样你就可以轻松地检查调试器中发生了什么,但是现实生活中的程序会更好地通过增加大小来增长,例如增加大小或者只增加100KB - 你的细节预期数据应该指导您做出这个决定。)
#include <stdlib.h>
#include <stdio.h>
void fatal_error(void);
int main( int argc, char** argv)
{
int buf_size = 0;
int buf_used = 0;
char* buf = NULL;
char* tmp = NULL;
char c;
int i = 0;
while ((c = getchar()) != EOF) {
if (buf_used == buf_size) {
//need more space in the array
buf_size += 20;
tmp = realloc(buf, buf_size); // get a new larger array
if (!tmp) fatal_error();
buf = tmp;
}
buf[buf_used] = c; // pointer can be indexed like an array
++buf_used;
}
puts("\n\n*** Dump of stdin ***\n");
for (i = 0; i < buf_used; ++i) {
putchar(buf[i]);
}
free(buf);
return 0;
}
void fatal_error(void)
{
fputs("fatal error - out of memory\n", stderr);
exit(1);
}
答案 2 :(得分:0)
也许您将指针作为参数传递给函数b(),而函数b()又调用realloc 在这种情况下,您还需要返回指针。