gpt4 book ai didi

c - 如何将 char 数组重置为 NULL(空)

转载 作者:行者123 更新时间:2023-11-30 17:26:59 25 4
gpt4 key购买 nike

我正在编写一个代码来从后到前重新排列字符串中的单词。我首先设法从后到前排列字符,但在第二次交换字符串中的第二个单词之前似乎无法将字符串重置为空,依此类推。

例如,输入“这里到底发生了什么

输出结果是,“here onre go ising hellg thelg Whatg

因此前一个单词的最后一个字母保留在“tempWord”变量中。我怎样才能解决这个问题?

void revString(char statement[]);

int main (void){

int index;
char tempWord[LENGTH];
char statement[LENGTH] = "What the hell is going on here";
const char s[2] = " ";
char *word;
int wordCounter = 0;


revString(statement);

printf("%s\n", statement); //Temp printing

(很清楚,我要询问的代码位于此行下方)

//////////////////////////////////////////////////////////////////////////////////////
index = 0;
word = strtok(statement, s);

while (word != NULL){
wordCounter++;

for (index = 0; index <= strlen(word); index++){
tempWord[index] = '\0';
}

strcpy(tempWord, word);

revString(tempWord);

printf("%s ", tempWord);

word = strtok(NULL, s);

}
printf("\n");
printf("%d words", wordCounter);

}

让我知道你的想法!

void revString(char original[]){

int index;
char temp[LENGTH];
int j = 1;

for (index = 0; index < strlen(original); index++, j++){
temp[(strlen(original) - j)] = original[index];
}

strcpy(original, temp);
original[strlen(original)] = '\0';

}

最佳答案

问题是 temp 没有以“\0”结束。

我修改了 revString 并进行了一些调整(仅调用了一次 strlen)...

<p></p>

<p>void revString(char original[]){</p>

<pre><code>int index;
char temp[LENGTH];
int j = 1;
int len = strlen(original);

temp[len] = '\0';
for (index = 0; index < len; index++, j++){
temp[len - j] = original[index];
}

strcpy(original, temp);
original[len] = '\0';
</code></pre>

<p>}</p>

<p></p>

有趣的是,对于从 30 到 100 的 LENGTH 值,您的原始代码不会给我带来问题。对于超过 200 个字节的值,它会给我奇怪的字符(可能是垃圾),这让我设置字符串“temp”中的最后一个字符"为 NULL。

关于c - 如何将 char 数组重置为 NULL(空),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26569399/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com