我是c的新手,我有以下字符串:
char* content = realloc(NULL, sizeof(char) * 10);
char line [256];
我想附加:
content +=line;
但这会导致错误:expression must have integral type'
答案 0 :(得分:3)
关于您的代码,有几点要注意...
首先,表达式realloc(NULL, sizeof(char) * 10)
等效于malloc(10)
(sizeof(char)
被指定为始终等于1
)。
第二,C没有任何类型的动态数组。如果要将一个数组追加到另一个数组,则需要确保目标位置可以适合自身加上另一个数组。
第三,要附加两个以空值结尾的字节字符串(C中的常规“字符串”),请使用strcat
函数。如
strcat(content, line);
但是 ,只有在为content
分配了足够的空间来容纳完整串联字符串的情况下,您才能这样做。 并且 content
和line
都是以空终止的字节字符串。
为了将所有代码整合在一起,可能是这样的
// 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);
当然可以将其中的某些部分分为自己的功能。