所以这是我到目前为止所拥有的:
#include <stdio.h>
#include <cs50.h>
#include <string.h>
#include <ctype.h>
int main(void)
{
// creates variable string equal to input from user
printf("what name?\n");
string s = get_string();
int n = strlen(s);
if (s != NULL)
{
// iterates through string
for (int i = 0; i < n; i++)
{
// checks string for space, if so adds to iterator to skip char
while(s[i] == 32)
{
i++;
}
// checks if string is greater than or equal to 'A'
if(s[i] >= 'A')
{
// prints Char and it's integer, then adds to iterator
printf("%c", s[i]);
i++;
do {
i++;
} while (s[i] != 32);
}
}
}
}
无论如何都无法将两个单词分隔为不同的索引,我尝试使用'\ 0'。非常感谢您的帮助。我真的在尝试学习和理解我在哪里出错了。感谢您的帮助或建议。
最佳答案
这是您真正要出错的部分:
do {
i++;
} while (s[i] != 32);
作为解释为什么大多数情况下会导致细分错误的示例,假设用户输入了
John
。那么s
将是一个char
数组,长度为5个元素,包含'J'
,'o'
,'h'
,'n'
和'\0'
。这将发生:在for循环中,您的代码将在
'J'
中找到s[0]
并显示它。然后它将
i
增加到1
。然后它将进入您的
do
循环。然后,将
i
增加到2
并将s[2]
(即'h'
)与32
进行比较。由于
'h'
不等于' '
,它将重复该循环,将i
增加到3
,然后将s[3]
(即'n'
)与32
(与' '
相同)进行比较)。由于
'n'
不等于32
,它将重复该循环,将i
增加到4
,并将s[4]
(即'\0'
)与32
进行比较。由于
'\0'
不等于32
,它将重复该循环,将i
增加到5
,然后将s[5]
(超出数组末尾)与32
进行比较。然后它将继续重复该循环,并越来越多地进入内存,直到它偶然偶然发现
32
或遇到分段错误时,才应进入循环。关于c - 尝试配置程序以从C中的字符串返回初始值,遇到段错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44122757/