我试图将一个带有新字符串的字符串数组传递给一个函数,在这个函数中我想将此字符串添加到数组中并重置该字符串。我似乎无法让它在函数内部工作,但没有它就可以工作
int main(void)
{
const char* text = "hello world";
int text_length = strlen(text);
char* words[text_length];
char word[text_length];
int length = 0;
int k = 0;
for (int i = 0; i < text_length; ++i) {
if (isspace(text[i])) {
words[length] = malloc(strlen(word) + 1);
strcpy(words[length++], word);
memset(word, 0, sizeof(word));
k = 0;
}
//...
//... adding chars to the word
word[k++]= text[i];
}
}
这工作得很好,而这则不行:
void add_word(char* words[], char* word, int* words_length, int* word_cursor)
{
words[*words_length] = malloc(strlen(word) + 1);
strcpy(words[*words_length++], word);
memset(word, 0, sizeof(word));
*word_cursor = 0;
}
int main(void)
{
const char* text = "hello world";
int text_length = strlen(text);
char* words[text_length];
char word[text_length];
int length = 0;
int k = 0;
for (int i = 0; i < text_length; ++i) {
if (isspace(text[i])) {
add_word(words, word, &length, &k);
}
//...
//... adding chars to the word
word[k++]= text[i];
}
}
我错过了什么?
最佳答案
我的猜测是它不起作用,因为您没有在word
数组中正确添加空终止符。
在第二个示例中,您刚刚复制粘贴了第一个工作代码中的代码,但忘记更改一个关键位:
memset(word, 0, sizeof(word));
在函数add_word
中,变量word
是一个指针,sizeof(word)
返回大小指针本身,而不是它指向的内容。
确保 word
中的字符串始终以 null 结尾的最佳解决方案是,当您想要将其视为字符串时,在所需的位置实际显式添加终止符:
if (isspace(text[i])) {
word[k] = '\0'; // Add null-terminator
add_word(words, word, &length, &k);
}
关于c - 更新函数内的字符串数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58180149/