指针索引换下标索引出现问题?
#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
请按任意键继续. . .
感觉用下标索引赋值都赋不进去,这是为什么? str2 = str1[++i]; 因为str1[++i]中已经i+1了,赋值给你str2是,i是已经+1之后的值,所以不会覆盖 两个问题
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;
} alexw_h264 发表于 2020-3-7 08:49
两个问题
1. if (str2 = '\0') 这里少了一个=,应该是if (str2 == '\0')
2.str2[++i] = str1[++i]; 这 ...
str2 中i为什么不要加1,不会覆盖之前的i吗?
页:
[1]