将char []附加到char * content = realloc(NULL,sizeof(char)* 10);

时间:2019-04-23 12:00:42

标签: c string

我是c的新手,我有以下字符串:

char* content = realloc(NULL, sizeof(char) * 10);
char line [256];

我想附加:

content +=line;

但这会导致错误:expression must have integral type'

1 个答案:

答案 0 :(得分:3)

关于您的代码,有几点要注意...

首先,表达式realloc(NULL, sizeof(char) * 10)等效于malloc(10)sizeof(char)被指定为始终等于1)。

第二,C没有任何类型的动态数组。如果要将一个数组追加到另一个数组,则需要确保目标位置可以适合自身加上另一个数组。

第三,要附加两个以空值结尾的字节字符串(C中的常规“字符串”),请使用strcat函数。如

strcat(content, line);

但是 ,只有在为content分配了足够的空间来容纳完整串联字符串的情况下,您才能这样做。 并且 contentline都是以空终止的字节字符串。


为了将所有代码整合在一起,可能是这样的

// The initial length of content
#define CONTENT_LENGTH  10

// Allocate some memory
char *content = malloc(CONTENT_LENGTH);

// Copy a string to the newly allocated memory
strcpy(content, "foobar");

// Create an array and initialize it
char line[256] = "hoola"

// To concatenate the two strings, we first need to make sure it can all fit
// in the memory for content, otherwise we need to reallocate it
// Note the +1 in the calculation: It's to account for the null terminator
if (strlen(content) + strlen(line) + 1 > CONTENT_LENGTH)
{
    // Not enough space, need to reallocate the memory
    char *temp_content = realloc(content, strlen(content) + strlen(line) + 1);
    if (temp_content == NULL)
    {
        printf("Could not allocate memory\n");
        exit(EXIT_FAILURE);
    }

    // Reallocation successful, make content point to the (possibly) new memory
    content = temp_content;
}

// Now we can concatenate the two strings
strcat(content, line);

// And print it (should print that content is foobarhoola)
printf("content = %s\n", content);

当然可以将其中的某些部分分为自己的功能。