我想知道为什么会出现这样的结果?
源代码
/***************************************************
* Copyright: 2023, 黄子涵.
* File name: huangzihan_c_program_142
* Description: 改变指针的值
* Author: 黄子涵
* Version: V1.0.0
* Date: 2023-01-08
* ****************************************************/
#include<stdio.h>
char huangzihan[10];
char huangchunqin[12];
char chenlanying[12];
char shejiazi[8];
void name_input();
void name_output();
void name_output_n();
void name_input()
{
int i;
printf("*********************************\n");
printf(" 给字符数组输入对应的名字 \n");
printf("*********************************\n");
printf("请输入黄子涵的小写拼音:");
for(i=0;i<10;i++)
{
scanf("%c",&huangzihan[i]);
if(huangzihan[i]==10)
{
huangzihan[i]='\0';
break;
}
}
getchar();
printf("请输入黄春钦的小写拼音:");
for(i=0;i<12;i++)
{
scanf("%c",&huangchunqin[i]);
if(huangchunqin[i]==10)
{
huangchunqin[i]='\0';
break;
}
}
getchar();
printf("请输入陈兰英的小写拼音:");
for(i=0;i<11;i++)
{
scanf("%c",&chenlanying[i]);
if(chenlanying[i]==10)
{
chenlanying[i]='\0';
break;
}
}
getchar();
printf("请输入佘佳梓的小写拼音:");
for(i=0;i<8;i++)
{
scanf("%c",&shejiazi[i]);
if(shejiazi[i]==10)
{
shejiazi[i]='\0';
break;
}
}
printf("\n");
}
void name_output()
{
char *p1,*p2,*p3,*p4;
printf("*********************************\n");
printf(" 将字符数组对应的名字输出 \n");
printf("*********************************\n");
printf("输出huangzihan:");
p1=huangzihan;
printf("%s",p1);
printf("\n");
printf("输出huangchunqin:");
p2=huangchunqin;
printf("%s",p2);
printf("\n");
printf("输出chenlanying:");
p3=chenlanying;
printf("%s",p3);
printf("\n");
printf("输出shejiazi:");
p4=shejiazi;
printf("%s",p4);
printf("\n");
}
void name_output_n()
{
int i;
char *p;
printf("\n");
printf("*********************************\n");
printf(" 改变指针的值 \n");
printf("*********************************\n");
printf("你要从第几个字符输出huangzihan(共10个字符)?");
scanf("%d",&i);
p=huangzihan+i-1;
printf("这是你要输出的字符串:%s",p);
printf("\n");
printf("你要从第几个字符输出huangchunqin(共12个字符)?");
scanf("%d",&i);
p=huangchunqin+i-1;
printf("这是你要输出的字符串:%s",p);
printf("\n");
printf("你要从第几个输出chenlanying(共11个字符)?");
scanf("%d",&i);
p=chenlanying+i-1;
printf("这是你要输出的字符串:%s",p);
printf("\n");
printf("你要从第几个输出shejiazi(共8个字符)?");
scanf("%d",&i);
p=shejiazi+i-1;
printf("这是你要输出的字符串:%s",p);
printf("\n");
}
int main()
{
extern char huangzihan[10];
extern char huangchunqin[12];
extern char chenlanying[12];
extern char shejiazi[8];
name_input();
name_output();
name_output_n();
return 0;
}
起初,我认为这是不添加字符串的结束标记的问题,但我添加了字符串的结束标签,发现它不起作用。添加代码如下:
if(shejiazi[i]==10)
{
shejiazi[i]='\0';
break;
}
我想输出结果
输出huangzihan:huangzihan
输出huangchunqin:huangchunqin
输出chenlanying:chenlanying
输出shejiazi:shejiazi
实际输出结果
我想知道为什么会发生这种情况。如果你知道,请告诉我。非常感谢。
回复
1个回答
test
2024-07-10
char huangzihan[10];
里面只能存 10 字符,里面已经没有存 '\0'
的空间了。而且,for (i=0; i<10; i++)
只循环了十次,在循环内部也没有处理到最后的 if (huangzihan[i] == 10)
,所以也没有在最后写入 '\0'
。
内存需要开大一点。
回复
适合作为回答的
- 经过验证的有效解决办法
- 自己的经验指引,对解决问题有帮助
- 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
- 询问内容细节或回复楼层
- 与题目无关的内容
- “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容