while (n-- && (*target2++ = *target1++) != '\0') 复制串长度不是n
本帖最后由 artistlu 于 2017-11-19 15:24 编辑#include <stdio.h>
int main()
{
//字符改为abcdef 就能打印abc(好奇怪)
char str[] = "abcdef";
char str2[] = "";
char *target1 = str;
char *target2 = str2;
int n = 3;
while (n-- && ((*target2++ = *target1++) != '\0'))
{
printf("%d->%c\n", n, *(target1-1));
}
printf("%s\n", str2);
与运算会短路,你设置了n为3,三次循环以后n为零,后面的自增运算都不会执行了 BngThea 发表于 2017-11-19 16:18
与运算会短路,你设置了n为3,三次循环以后n为零,后面的自增运算都不会执行了
就是为了不执行,复制n个字符啊,怪就怪在会复制所有字符 ,然后吧str增加一个字符就和预期一样了 artistlu 发表于 2017-11-19 16:42
就是为了不执行,复制n个字符啊,怪就怪在会复制所有字符 ,然后吧str增加一个字符就和预期一样了
你把数组名交给了指针,当然通过指针能访问所有数据 本帖最后由 artistlu 于 2017-11-19 17:27 编辑
BngThea 发表于 2017-11-19 16:59
你把数组名交给了指针,当然通过指针能访问所有数据
#include <stdio.h>
int main()
{
char str[] = "abcdefx";
char str2[] = "";
char *target1 = str;
char *target2 = str2;
int n = 3;
while (n-- && ((*target2++ = *target1++) != '\0'))
{
printf("%d->%c\n", n, *(target1-1));
}
printf("%s\n", str2);
} 这个和上面的 只是字符串多一个字母,但是打印就只有三个字符 abc而帖子里的却打印多于三个字符(如果不给结束符‘\0’) artistlu 发表于 2017-11-19 17:24
这个和上面的 只是字符串多一个字母,但是打印就只有三个字符 abc而帖子里的却打印多于三个字符(如 ...
char str2[] = "";
我觉得这个地方就有问题,按照这么定义一个数组,那后面使用的时候肯定会越界,就算不出错,那也是巧合。 3-3 发表于 2017-11-19 18:18
char str2[] = "";
我觉得这个地方就有问题,按照这么定义一个数组,那后面使用的时候肯定会越界,就 ...
出现这种情况,就是因为越界,以后我注意初始化数组长度
页:
[1]