gpt4 book ai didi

c - scanf 字符串困惑

转载 作者:行者123 更新时间:2023-11-30 17:55:29 24 4
gpt4 key购买 nike

struct dict {
int len;
char (*dict0)[MAX_WORD_LEN+1];
char (*dict1)[MAX_WORD_LEN+1];
};

/* the memory allocation */
void createDict(struct dict* myDict)
{
(*myDict).dict0 = malloc((*myDict).len*sizeof(char));
(*myDict).dict1 = malloc((*myDict).len*sizeof(char));
if(((*myDict).dict0==0)||((*myDict).dict1==0))
exit(1);
}

for(int i = 0; i < words; i++)
{
scanf("%s", p_diction->dict0[i]);
scanf("%s", p_diction->dict1[i]);
}

for(int i=0; i<words; i++)
{
printf("%s ", &p_diction->dict0[i]);
printf("%s\n", &p_diction->dict1[i]);

}

p_diction 是指向 dict 类型的指针。

我将 words 设置为 11 并输入以下内容:

one lo
two ba
three li
day night
work eat
great terrible
terrible disaster
A a
start delay
finish never
I you

但是当我 printf 检查字符串时,它们会打印以下内容:

one ree
two y
three rk
day eat
work rrible
great terrible
terrible art
A nish
start delay
finish never
I you

知道为什么第一个 scanf 可以完美地读取它,而第二个只是从稍后出现的单词中读取随机内容吗?

最佳答案

看起来您正在使用一维数组来保存多个字符串(单词),如果您以表示单词结尾的唯一字符结束每个字符串(单词),则这是可能的。但使用普通函数 scanf() 和 printf() 不可能做到这一点,您必须编写自己的函数。例如,假设您以 @ 结尾每个单词。以下循环会将所有单词打印到屏幕上。

int i = 0;
while((*myDict).dict0[i] != '\0')//While index dose not point to end of array
{
for(; (*myDict).dict0[i] != '@'; i++)//Print one word a single character at a time
{
printf("%c", (*myDict).dict0[i]);
}
printf("\n"); i++;//Print a newline after the word and then increase the index by one
//so that it does not point to '@'.
}

但是您也可以将 dict0 和 dict1 数组制作为指针数组,其中每个元素都是指向单个单词的指针。

关于c - scanf 字符串困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14307975/

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