【发布时间】:2020-03-10 19:45:18
【问题描述】:
这是我的任务:编写一个程序,读取一个最大长度为 m = 100 的字符串 w 和两个索引 a; [1] 的 b 元素; 100],从键盘输入一个小于或等于 b 的值。然后,以 w[a-1] 开头并以 w[b-1] 结尾的子字符串应打印在屏幕上。我不允许使用函数或循环。 示例:输入:w =“日落”,a = 2,b = 5。输出:“撤消”
我创建了这个程序,但我没有完成最后一步。
int main(){
char w[100];
int a, b;
printf("Please insert a value for a and b, where b is greater than a: ");
printf("\na = ");
scanf("%d", &a);
printf("\nb = ");
scanf("%d", &b);
printf("Now please insert a phrase, which is at most 100 character long:\t");
scanf("%100s", &w);
w[b] = '\0';
printf("w = %s", w);
}
【问题讨论】:
-
记住
char[100]只能保存 99 个字节的文本,因为最后一个字节是为终止符保留的。 -
为
w[b]分配一个空终止符,并使用指针算法打印w+a。 -
scanf("%100s", &w);和这个char w[100];是绝对危险的。因为scanf格式说明符%s在您输入的字符串之后写入一个终止\0,如果您这样做并输入一个包含100 个字符的字符串,则该字符串将存储在缓冲区之外。请改用scanf("%99s", &w);。 -
帮自己一个忙,避免使用 scanf 从键盘读取,而是使用 fgets 并转换为所需的类型,例如atoi 或如果必须使用 sscanf。