好的,我已经花费了很多精力,在这里查看了很多问题,但是我还无法完全解决这个问题。希望您能在这里为我的问题提供一些帮助!
int main(int argc, char *argv[]){
char read[50];
char *string[10];
while(1){
fgets(read,sizeof read, stdin);
int t = 0; //ticks whenever a non-whitespace char is read
int pos = 0; //keeps track of position in string array
int i;
int j;
for(i = 0; i < sizeof read; i++){
if(isspace(read[i]) && t != 0){
string[pos] = malloc((t+1) * (sizeof(char)));
// int z;
// for(z = 0; z < sizeof string[pos]; z++){
// string[pos][z] = '\0';
// }
for(j = 0; j < t; j++){
string[pos][j] = read[i-(t-j)];
}
t = 0;
pos++;
}
else if(!isspace(input[i])) t++;
}
int k;
for(k = 0; k < pos; k++){
printf("%i: %s\n",k,string[k]);
free(string[k]);
}
}
}
我正在尝试编写一个程序,该程序将从用户那里读取一个句子,然后将其分解成单独的单词,并将每个单词存储在自己的char数组中。
我使用malloc()来分配足够的内存来容纳每个单词,并在使用后释放它。
第一次运行很好,但在随后的循环中,长度小于5个字符的单词(仅当输入多个由空格分隔的单词时)将不能正确显示,会附加一些随机的额外字符/符号。
这可能是由于malloc使用了未清空的已释放内存引起的吗?如果是这种情况,我应该如何正确使用malloc?
我发现唯一的解决方法是使用我已经注释掉的代码。它用\0填充新分配的char数组。
谢谢!
示例输出:
input words(0): we we we
0: we
1: we
2: we
input words(1): we we we
0: we�
1: we�
2: we
malloc
会尽可能地重复使用内存,以提高缓存友好性。 - o11c