奥普瓯江 发表于 2017-6-27 21:34:30

关于用指针打印的问题

为什么指针在这里就可以打印如果换到循环后面就打印不了,请教
#include<stdio.h>
#define MAX        1024

int main()
{
                char str1;
                char str2;
                char *pa1 = str1;
                char *pa2 = str2;
                int j = 0;


                fgets( str1, MAX, stdin );

                fgets( str2, MAX, stdin );
                scanf("%d", &j);


               
               

                printf("%c\n",*(pa1+2));   //用指针打印
                while ( *pa1++ != '\0' )
                {
                                ;
                }

                pa1 -= 2;


                while(j--)
                {
                                *pa1++ = *pa2++;
                }
                printf("打印 %s\n", str1);
               

}

人造人 发表于 2017-6-27 22:16:05

不明白你想问什么
你的代码存在问题
123456789
987654321
3
3
打印 123456789987烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫 烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫k^?8
请按任意键继续. . .


while(*pa1++ != '\0')
        {
                ;
        }

        pa1 -= 2;
这是要干嘛?

奥普瓯江 发表于 2017-6-27 22:37:57

本帖最后由 奥普瓯江 于 2017-6-27 22:48 编辑

人造人 发表于 2017-6-27 22:16
不明白你想问什么
你的代码存在问题



就是我想用指针打印字符串里的值就是这个语句
printf("%c\n",*(pa1+2));

还有我这个句子用ubuntu这个系统,用gcc编译时没有问题的这是截图



改后的句子是这样的但是改成这样就打印不出来了
#include<stdio.h>
#define MAX      1024

int main()
{
                char str1;
                char str2;
                char *pa1 = str1;
                char *pa2 = str2;
                int j = 0;


                fgets( str1, MAX, stdin );

                fgets( str2, MAX, stdin );
                scanf("%d", &j);


               
               


                while ( *pa1++ != '\0' )
                {
                              ;
                }

                pa1 -= 2;


                while(j--)
                {
                              *pa1++ = *pa2++;
                }
                printf("打印 %s\n", str1);
                printf("%c\n",*(pa1+2));   //用指针打印
               

}

人造人 发表于 2017-6-27 22:41:30

奥普瓯江 发表于 2017-6-27 22:37
就是我想用指针打印字符串里的值就是这个语句




        while(j--)
        {
                *pa1++ = *pa2++;
        }

这是要干嘛?
为什么要把pa2 复制到pa1?

人造人 发表于 2017-6-27 22:43:01

奥普瓯江 发表于 2017-6-27 22:37
就是我想用指针打印字符串里的值就是这个语句




#include<stdio.h>
#define MAX      1024

int main()
{
        char str1;
        char str2;
        char *pa1 = str1;
        char *pa2 = str2;
        int j = 0;


        fgets(str1, MAX, stdin);

        fgets(str2, MAX, stdin);
        scanf("%d", &j);


        while(j--)
        {
                *pa1++ = *pa2++;
        }
        printf("打印 %s\n", str1);
        printf("%c\n", *(pa1 + 2));   //用指针打印


}

123456789
987654321
3
打印 987456789

6
请按任意键继续. . .

ba21 发表于 2017-6-27 22:44:20

这代码也没有第二家了{:10_285:}

奥普瓯江 发表于 2017-6-27 22:52:33

人造人 发表于 2017-6-27 22:43


这个是哪个作业题,《带你学习带你飞》s1e22课,写一个相当于strcat函数的程序。

奥普瓯江 发表于 2017-6-27 22:54:59

人造人 发表于 2017-6-27 22:43


这个是作业题就是《带你学C带你飞》里面的s1e22课后作业写一个相当于strcat函数的程序。
下面 是作业题

奥普瓯江 发表于 2017-6-27 23:00:49

人造人 发表于 2017-6-27 22:43


为什么printf("%c\n", *(pa1 + 2));打印的是6能我用指针指向的是3啊,指针初始化不应该是*(pa1 + 0)他指向的不应该是1么,完了我加2他指向的应该是3的啊,没弄明白还请指点谢谢。

奥普瓯江 发表于 2017-6-27 23:01:22

人造人 发表于 2017-6-27 22:43


为什么printf("%c\n", *(pa1 + 2));打印的是6能我用指针指向的是3啊,指针初始化不应该是*(pa1 + 0)他指向的不应该是1么,完了我加2他指向的应该是3的啊,没弄明白还请指点谢谢。

奥普瓯江 发表于 2017-6-27 23:03:02

人造人 发表于 2017-6-27 22:43


为什么printf("%c\n", *(pa1 + 2));打印的是6能我用指针指向的是3啊,指针初始化不应该是*(pa1 + 0)他指向的不应该是1么,完了我加2他指向的应该是3的啊,没弄明白还请指点谢谢。

人造人 发表于 2017-6-27 23:10:23

奥普瓯江 发表于 2017-6-27 23:03
为什么printf("%c\n", *(pa1 + 2));打印的是6能我用指针指向的是3啊,指针初始化不应该是*(pa1 + 0)他指 ...

因为覆盖了呀
while(j--)
      {
                *pa1++ = *pa2++;
      }

人造人 发表于 2017-6-27 23:17:16

#include<stdio.h>

#define MAX 1024

int main(void)
{
        char str1;
        char str2;
        char *pa1 = str1;
        char *pa2 = str2;

        fgets(str1, MAX, stdin);
        fgets(str2, MAX, stdin);

        while(*pa1++ != '\0')
                ;
       
        pa1 -= 2;

        while(*pa2 != '\0')
                *pa1++ = *pa2++;

        *pa1++ = '\0';

        printf("打印 %s\n", str1);

        return 0;
}


123456789
;987654321
打印 123456789;987654321

请按任意键继续. . .

奥普瓯江 发表于 2017-6-27 23:20:54

本帖最后由 奥普瓯江 于 2017-6-27 23:29 编辑

人造人 发表于 2017-6-27 23:10
因为覆盖了呀

指针是被更改了在他的后面有从新被增加了几个数值,但是指针的指向数值应该是没有变的啊,*pa1是1、*(pa1+1)是2、*(pa1+2)是三以此类推,(先申明我是初学者啊)在这个程序中如果他的指针在没有覆盖前应该是0至8,覆盖了之后应该是加了3位数也就是0至11了,*pa2给了*pa1,我现在要指*(pa1+2)的指针所以我的逻辑应该是没有错的啊

求道于盲 发表于 2017-6-27 23:21:08

pa1--

人造人 发表于 2017-6-27 23:26:43

奥普瓯江 发表于 2017-6-27 23:20
指针是被覆盖过但是他的数值应该是没有变的啊,(先申明我是初学者啊)在这个程序中如果他的指针在没有 ...

#include<stdio.h>
#define MAX      1024

int main()
{
        char str1;
        char str2;
        char *pa1 = str1;
        char *pa2 = str2;
        int j = 0;


        fgets(str1, MAX, stdin);

        fgets(str2, MAX, stdin);
        scanf("%d", &j);



        printf("**************************\n");
        printf("%p\n", pa1);
        printf("**************************\n");




        while(j--)
        {
                *pa1++ = *pa2++;
        }
        printf("打印 %s\n", str1);


        printf("**************************\n");
        printf("%p\n", pa1);
        printf("**************************\n");


        printf("%c\n", *(pa1 + 2));   //用指针打印


}

123456789
987654321
3
**************************
0073F848
**************************
打印 987456789

**************************
0073F84B
**************************
6
请按任意键继续. . .

奥普瓯江 发表于 2017-6-27 23:34:36

人造人 发表于 2017-6-27 23:26


我明白了,看内存地址他是变了,可是还想加一个附加题那就是他为什么会变,这个还不是很明白,谢谢您解惑麻烦了

人造人 发表于 2017-6-27 23:39:03

奥普瓯江 发表于 2017-6-27 23:34
我明白了,看内存地址他是变了,可是还想加一个附加题那就是他为什么会变,这个还不是很明白,谢谢您解惑 ...

#include<stdio.h>
#define MAX      1024

int main()
{
      char str1;
      char str2;
      char *pa1 = str1;
      char *pa2 = str2;
      int j = 0;


      fgets(str1, MAX, stdin);

      fgets(str2, MAX, stdin);
      scanf("%d", &j);



      printf("**************************\n");
      printf("%p\n", pa1);
      printf("**************************\n");




      while(j--)
      {
             *pa1++ = *pa2++;
      }
      printf("打印 %s\n", str1);


      printf("**************************\n");
      printf("%p\n", pa1);
      printf("**************************\n");


      printf("%c\n", *(pa1 + 2));   //用指针打印


}

人造人 发表于 2017-6-27 23:40:54

#include<stdio.h>
#define MAX      1024

int main()
{
        char str1;
        char *pa1 = str1;


        printf("**************************\n");
        printf("%p\n", pa1);
        printf("**************************\n");


        *pa1++;


        printf("**************************\n");
        printf("%p\n", pa1);
        printf("**************************\n");
}

人造人 发表于 2017-6-27 23:41:08

**************************
00D5F860
**************************
**************************
00D5F861
**************************
请按任意键继续. . .
页: [1] 2
查看完整版本: 关于用指针打印的问题