我想知道为什么会出现这样的结果?

作者站长头像
站长
· 阅读数 6

源代码

   /***************************************************
 * 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个回答
avatar
test
2024-07-10

char huangzihan[10]; 里面只能存 10 字符,里面已经没有存 '\0' 的空间了。而且,for (i=0; i<10; i++) 只循环了十次,在循环内部也没有处理到最后的 if (huangzihan[i] == 10) ,所以也没有在最后写入 '\0'

内存需要开大一点。

回复
likes
适合作为回答的
  • 经过验证的有效解决办法
  • 自己的经验指引,对解决问题有帮助
  • 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
  • 询问内容细节或回复楼层
  • 与题目无关的内容
  • “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容