我正在尝试创建一个程序,该程序从用户那里获取输入并打印每个单词的第一个字符,但每次我尝试这里都是我的代码。
#include <stdio.h>
#include <cs50.h>
#include <string.h>
int main(void)
{
char leng[100];
int len;
scanf("%s", &leng[100]);
len = strlen(&leng[100]);
char name[len];
//checking if at end or not
while (name[len] != '\0')
{
if (name[len] == ' ')
printf("%c", name[len + 1]);
len++;
}
}
每当我给出一个名字时,它会显示如下错误:
index 3 out of bounds for type 'char [len]'
答案 0 :(得分:2)
这两行不正确:
scanf("%s", &leng[100]);
len = strlen(&leng[100]);
如果你将这些翻译成英文,它们的含义是:
数组索引超出范围,因为leng [100]超出了数组的末尾。请记住,100元素数组从0到99,而不是从1到100!
您希望扫描到数组的基址,并将数组的基址传递给strlen()。我将保留语法,让您从教科书中找出答案。
顺便说一句,你的代码也有问题,因为你正在将数据读入名为leng的数组中,但是你的循环正在使用名为len的数组。您的代码中至少还有两个问题,但我会让它们进行调试。
答案 1 :(得分:0)
您的代码需要考虑一些事项。正如@richardschwartz已经提到的那样,你没有正确引用你的char数组。你有:
scanf("%s", &leng[100]);
len = strlen(&leng[100]);
您可能需要以下内容:
scanf("%s", leng);
len = strlen(leng);
另外,请记住,一旦检测到空白区域,带有%s标志的scanf将停止读取输入。例如,如果您输入&#34; hello world&#34;,
scanf("%s", leng);
只会抓住角色&#34;你好&#34;。为了解决这个问题,你可以循环scanf来读取多个单词并根据需要返回每个单词的第一个字符。
最后,不建议初学者使用scanf。请参阅paxdiablo关于缺少溢出保护的优秀理由,例如:https://stackoverflow.com/a/1248017/6870832