鱼C论坛

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

[已解决]指针索引换下标索引出现问题?

[复制链接]
发表于 2020-3-6 21:57:49 | 显示全部楼层 |阅读模式
1鱼币
#include<stdio.h>
#define MAX 1024

int main()
{
        int n,i;
        char str1[MAX];
        char str2[MAX];
        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[i] = str1[i];
                if ((int)str2[i] < 0)
                {
                        str2[++i] = str1[++i];
                }
                n--;
                if (str2[i] = '\0')
                {
                        break;
                }
                printf("%d %d",str1[i],str2[i]);
        }
        str2[i] = '\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
请按任意键继续. . .

感觉用下标索引赋值都赋不进去,这是为什么?
最佳答案
2020-3-6 21:57:50
str2[i] = str1[++i]; 因为str1[++i]中已经i+1了,赋值给你str2是,i是已经+1之后的值,所以不会覆盖

最佳答案

查看完整内容

str2 = str1[++i]; 因为str1[++i]中已经i+1了,赋值给你str2是,i是已经+1之后的值,所以不会覆盖
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-3-6 21:57:50 | 显示全部楼层    本楼为最佳答案   
str2[i] = str1[++i]; 因为str1[++i]中已经i+1了,赋值给你str2是,i是已经+1之后的值,所以不会覆盖
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

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

int main()
{
        int n,i;
        char str1[MAX];
        char str2[MAX];
        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[i] = str1[i];
                if ((int)str2[i] < 0)
                {
                        str2[i] = str1[++i];
                }
                n--;
                if (str2[i] == '\0')
                {
                        break;
                }
                printf("%d %d",str1[i],str2[i]);
        }
        str2[i] = '\0';
        printf("拷贝完毕!\n");
        printf("现在str2中的内容是:%s\n",str2);//可能只拷贝部分,要手动加换行符
      
        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 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] 中i为什么不要加1,不会覆盖之前的i吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-16 00:27

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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