鱼C论坛

 找回密码
 立即注册
查看: 3987|回复: 3

PTA下字符串输入输出验证2:循环配合%c读入串发生没想到的“段错误”。

[复制链接]
发表于 2021-4-27 13:16:26 From FishC Mobile | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x


PTA下字符串输入输出验证2:循环配合%c读入串发生没想到的“段错误”。
输入并输出一个不带空格的字符串。注意本题输入样例的字符串后教师设置时不带换行。PTA目前是%s和gets可以正确读入。循环配合%c读入(while((s[i]=getchar())!='\n') i++ ; s[i]=0; )会发生 “段错误”、测试失败。

输入格式:
Hellochina!

输出格式:
Hellochina!

输入样例:
Hellochina!
输出样例:
Hellochina!
代码长度限制
16 KB
时间限制
400 ms
内存限制
64MB
我的代码哪里出现问题了求助
#include<stdio.h>
int main(){
int i=0;
char s[i],*p;
p=&s[i];
scanf("%s",p);
for(;s[i]!='\0';i++)
{
printf("%s",*(p+i));
}
s[i]='\n';
return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-4-27 14:01:03 | 显示全部楼层
int i=0;
char s[i]

你这里都限定了 s的长度为0
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-4-27 14:23:57 From FishC Mobile | 显示全部楼层
#include<stdio.h>
int main(){
int i;
char s[i],*p;
p=&s[i];
scanf("%s",p);
for(i=0;s[i]!='\0';i++)
{
printf("%s",*(p+i));
}
s[i]='\n';
return 0;
}
改正了之后。。
a.c: In function ‘main’:
a.c:9:10: warning: format ‘%s’ expects argument of type ‘char *’, but argument 2 has type ‘int’ [-Wformat=]
printf("%s",*(p+i));
          ^
a.c:6:1: warning: ignoring return value of ‘scanf’, declared with attribute warn_unused_result [-Wunused-result]
scanf("%s",p);
^~~~~~~~~~~~~
a.c:4:1: warning: ‘i’ is used uninitialized in this function [-Wuninitialized]
char s[i],*p;
^~~~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-4-27 16:46:27 | 显示全部楼层
Porphyring 发表于 2021-4-27 14:23
#include
int main(){
int i;


你绝对是有毒....
你现在连 i 都不初始化了,s 怎么可能能声明成功....
要么你就给 s 数组声明一个足够大的定值
要么就 malloc 堆申请  然后大小改变后用 realloc 扩大 s 的空间

你这个声明就不对,没有这种声明方法
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-14 15:29

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表