【发布时间】:2021-08-24 18:39:26
【问题描述】:
我正在编写一个函数,它接收一个空的指针数组,该函数最多应扫描的字数(大小)(顺便说一句,它可以扫描小于 size 的字数),以及最大长度一个词(我应该确保一个词不超过)。
这是我的代码(我使用的是 C 并且带有箭头的行会出错):
void read_words(char* words[], int size, int max_str_len)
{
int i=0;
while( (i<size ) && (scanf("%s", & *words[i]) != EOF ))
{
1-> if(strlen(*words[i]) > max_str_len )
{
2-> *words[i][max_str_len-1] = '\0';
}
}
}
在遇到一堆错误后,我意识到错误来自指针数组仅指向序列的第一个字符(仅表示单词的第一个字母)这一事实。
(第一行箭头也给了mr以下错误: 错误:传递 'strlen' 的参数 1 使指针从整数不进行强制转换)
所以问题是,我该如何解决?我如何得到整个单词或到达它的结尾?如果我将其更改为“ *words[i] + max_str_len ”是否可以解决问题?但在那种情况下,我可能会得到内存中另一个变量的值......
非常感谢任何帮助:)
【问题讨论】:
-
提示:首先执行
i<size然后scanf()是有意义的。 -
*words[i].strlen()看起来不像 C。你的意思是strlen(words[i])? -
'/0'当然应该是'\0'。 -
我假设
max_str_len是(大于)每个word可以容纳的最大字符数。如果您在每个单词中写入超过该数字(scanf会很乐意这样做),则行为将是未定义的。尝试通过在末尾写入空字符来截断字符串并不能避免问题。 -
使用
array[index]访问数组元素,而不是*array[index],就像您在代码中的任何地方所做的那样。
标签: c string function pointers