|
10鱼币
编写C语言S1E26课后作业时,无报错,输入英文按下回车后EXE停止工作,但是复制小甲鱼答案运行却没问题,请大家帮我看看这是什么情况,感谢感谢
- #include <stdio.h>
- int main()
- {
- char str[1024] = { 0 };
- char *sp = str[0];
- int i, j;
- int count = 0, para = 0, max = 0;
- int get;
- printf("请输入一个英文句子:");
- while((get = getchar()) != '\n') //存储数据,获取长度和句子数量
- {
- *sp++ = get;
- count++;
- if(get == ' ')
- {
- para++;
- if(count > max)
- {
- max = count;
- }
- count = 0;
- }
- }
- char result[para][max]; //初始化可变长数组
- for(i = 0; i < para; i++)
- {
- for(j = 0; j < max; j++)
- {
- result[i][j] = 0;
- }
- }
- sp = str[0]; //转移数据到result中
- for(i = 0; i < para; i++)
- {
- for(j = 0; j < max; j++)
- {
- if(*sp == 0 || *sp == ' ')
- {
- continue;
- }
- result[i][j] = *sp++;
- }
- }
- printf("分割结果已存入到result[%d][%d]中.", para, max);
- for(i = 0; i < para; i++)
- {
- printf("%s", result[i]);
- printf("\n");
- }
- return 0;
- }
复制代码
问题分析:
根据你的描述,代码在运行时出现了问题,输入英文后按下回车,程序停止工作。这可能是由于以下几个原因导致的问题:
1. 内存越界:在代码中,定义了一个 str 数组来存储输入的句子,长度为 1024。然后定义了一个指针 sp 指向 str[0],用于存储字符。但是在 sp = str[0]; 这一行,使用了数组下标访问 str[0] 的值,这是不正确的,应该使用 sp = &str[0]; 来获取指针地址。
修改建议:
下面是修改后的代码,修复了上述问题:
- ++
- #include <stdio.h>
- int main() {
- char str[1024] = { 0 };
- char *sp = &str[0]; // 修改此处
- int i, j;
- int count = 0, para = 0, max = 0;
- int get;
-
- printf("请输入一个英文句子:");
- while((get = getchar()) != '\n')
- {
- *sp++ = get;
- count++;
- if(get == ' ')
- {
- para++;
- if(count > max)
- {
- max = count;
- }
- count = 0;
- }
- }
-
- char result[para][max];
- for(i = 0; i < para; i++)
- {
- for(j = 0; j < max; j++)
- {
- result[i][j] = 0;
- }
- }
-
- sp = &str[0]; // 修改此处
- for(i = 0; i < para; i++)
- {
- for(j = 0; j < max; j++)
- {
- if(*sp == 0 || *sp == ' ')
- {
- continue;
- }
- result[i][j] = *sp++;
- }
- }
-
- printf("分割结果已存入到result[%d][%d]中.", para, max);
-
- for(i = 0; i < para; i++)
- {
- printf("%s\n", result[i]);
- }
-
- return 0;
- }
复制代码
修改后的代码将 sp 的赋值改为 sp = &str[0];,确保指针指向数组正确的地址。另外,在打印 result[i] 时,增加了换行符 \n,使输出结果更清晰。
希望能帮到你!
球一个最佳答案谢谢啦!这对我非常重要!  
|
-
最佳答案
查看完整内容
问题分析:
根据你的描述,代码在运行时出现了问题,输入英文后按下回车,程序停止工作。这可能是由于以下几个原因导致的问题:
1. 内存越界:在代码中,定义了一个 str 数组来存储输入的句子,长度为 1024。然后定义了一个指针 sp 指向 str[0],用于存储字符。但是在 sp = str[0]; 这一行,使用了数组下标访问 str[0] 的值,这是不正确的,应该使用 sp = &str[0]; 来获取指针地址。
修改建议:
下面是修改后的代码,修复了上 ...
|