我需要帮助弄清楚如何擦除或重置char*
,但要将char*
的值保留在struct
中。
例如,如果我有
char* word;
struct test *person;
word = (char*)malloc(sizeof(char) * 50);
person = malloc(sizeof(struct test));
假设我使用函数将单词“ Jack”存储在单词中,因为我使用read函数从CSV中读取。
所以...
while (read(STDIN, buffer, 1) != 0) {
add(word, *buffer);
}
void add(char* string, char c) {
int size = strlen(string);
string[size] = c;
string[size + 1] = '\0';
}
person->name = word;
memset(word, 0, sizeof(word));
这样做会清空person-> name中的字符串以及单词。
如何将字符串保留在person->name
中?
我尝试创建一个单独的字符串,但无法解决该问题。
char temp[size];
int i = 0;
while (word[i] != '\0') {
temp[i] = word[i];
i++;
}
这还将清除person->name
中的字符串以及临时字符串。
任何帮助将不胜感激。
答案 0 :(得分:1)
person->name = word; memset(word, 0, sizeof(word));
如果要为word
复制person->name
,则必须先分配内存:
person->name = malloc(strlen(word) + 1); // + 1 for the terminating '\0'
然后,您可以将word
指向的字符串复制到person->name
指向的内存中:
strcpy(person->name, word);
然后,您可以将word
的长度设置为0
:
word[0] = '\0';
并重复使用word
。
请确保free()
不再需要用malloc()
分配的所有内存。
void add(char* string, char c) { int size = strlen(string); string[size] = c; string[size + 1] = '\0'; }
此函数不安全,因为它可能写入超出为string
分配的内存范围。给它另一个参数来表示它的大小:
#include <stdbool.h> // bool
#include <stddef.h> // size_t
#include <string.h> // strlen()
bool add(char* string, size_t size, char ch)
{
size_t length = strlen(string);
if (length + 2 > size)
return false;
string[length] = ch;
string[length + 1] = '\0';
return true;
}