杨龙2 发表于 2020-3-6 21:57:49

指针索引换下标索引出现问题?

#include<stdio.h>
#define MAX 1024

int main()
{
        int n,i;
        char str1;
        char str2;
        char *target1 = str1;
        char *target2 = str2;
        char ch;
       
        printf("请输入一个字符串到str1中:");
        fgets(str1,MAX,stdin);
        printf("请输入要拷贝的个数:");
        scanf("%d",&n);//要取址存进去

        printf("正在拷贝str1的内容到str2...\n");//不能放在循环结构中打印
       
/*        while(n--)
        {
                ch = *target2++ = *target1++;//必须赋值给ch因为这个语句结束后面指针已经往后移了
               
                if ((int)ch < 0)//注意将字符强制转化为整型在比较大小
                {
                        *target2++ = *target1++;
                }
               
                if (ch == '\0')
                {
                        break;
                }
        }
        *target2 = '\0';//因为上面指针赋值的式子注定要往后指,所以直接赋值即可
*/
        for (i=0;;i++)
        {       
                if (!n)//注意等于0才让进
                {
                        break;
                }
                printf("时间\n");
                str2 = str1;
                if ((int)str2 < 0)
                {
                        str2[++i] = str1[++i];
                }
                n--;
                if (str2 = '\0')
                {
                        break;
                }
                printf("%d %d",str1,str2);
        }
        str2 = '\0';
        printf("拷贝完毕!\n");
        printf("现在str2中的内容是:%s\n",str2);//可能只拷贝部分,要手动加换行符
       
        return 0;
}
结果

请输入一个字符串到str1中:ad到付即可
请输入要拷贝的个数:10
正在拷贝str1的内容到str2...
时间
97 0时间
100 0时间
-72 0时间
-76 0时间
10 0时间
0 0时间
0 0时间
0 0时间
0 0时间
0 0拷贝完毕!
现在str2中的内容是:

--------------------------------
Process exited after 8.923 seconds with return value 0
请按任意键继续. . .

感觉用下标索引赋值都赋不进去,这是为什么?

alexw_h264 发表于 2020-3-6 21:57:50

str2 = str1[++i]; 因为str1[++i]中已经i+1了,赋值给你str2是,i是已经+1之后的值,所以不会覆盖

alexw_h264 发表于 2020-3-7 08:49:50

两个问题
1. if (str2 = '\0') 这里少了一个=,应该是if (str2 == '\0')
2.str2[++i] = str1[++i]; 这里多了一个++,应该是str2 = str1[++i];

修正之后的源码:
#include<stdio.h>
#define MAX 1024

int main()
{
      int n,i;
      char str1;
      char str2;
      char *target1 = str1;
      char *target2 = str2;
      char ch;
      
      printf("请输入一个字符串到str1中:");
      fgets(str1,MAX,stdin);
      printf("请输入要拷贝的个数:");
      scanf("%d",&n);//要取址存进去

      printf("正在拷贝str1的内容到str2...\n");//不能放在循环结构中打印
      
/*      while(n--)
      {
                ch = *target2++ = *target1++;//必须赋值给ch因为这个语句结束后面指针已经往后移了
               
                if ((int)ch < 0)//注意将字符强制转化为整型在比较大小
                {
                        *target2++ = *target1++;
                }
               
                if (ch == '\0')
                {
                        break;
                }
      }
      *target2 = '\0';//因为上面指针赋值的式子注定要往后指,所以直接赋值即可
*/
      for (i=0;;i++)
      {      
                if (!n)//注意等于0才让进
                {
                        break;
                }
                printf("时间\n");
                str2 = str1;
                if ((int)str2 < 0)
                {
                        str2 = str1[++i];
                }
                n--;
                if (str2 == '\0')
                {
                        break;
                }
                printf("%d %d",str1,str2);
      }
      str2 = '\0';
      printf("拷贝完毕!\n");
      printf("现在str2中的内容是:%s\n",str2);//可能只拷贝部分,要手动加换行符
      
      return 0;
}

杨龙2 发表于 2020-3-7 20:11:12

alexw_h264 发表于 2020-3-7 08:49
两个问题
1. if (str2 = '\0') 这里少了一个=,应该是if (str2 == '\0')
2.str2[++i] = str1[++i]; 这 ...

str2 中i为什么不要加1,不会覆盖之前的i吗?
页: [1]
查看完整版本: 指针索引换下标索引出现问题?