|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 Hermione 于 2017-12-11 21:41 编辑
1实现作业strcpy进阶时:
- #include <stdio.h>
- #define MAX 1024
- int main()
- {
- char str1[MAX];
- char str2[MAX];
- char *target1 = str1;
- char *target2 = str2;
- char ch;
- int n;
- printf("请输入一个字符串到 str1 中:");
- fgets(str1, MAX, stdin);
- printf("请输入需要拷贝的字符个数:");
- scanf("%d", &n);
- printf("开始拷贝 str1 的内容到 str2 中...\n");
- while (n--)
- {
- ch = *target2++ = *target1++;
- if (ch == '\0')
- {
- break;
- }
- if ((int)ch < 0)
- {
- *target2++ = *target1++;
- *target2++ = *target1++;
- }
- }
- *target2 = '\0';
- printf("拷贝完毕!\n");
- printf("现在,str2 中的内容是:%s\n", str2);
- return 0;
- }
复制代码
1.汉字是3个字节,那么25行开始ch读到的到底是什么?32、33行是因为汉字3个字节,就要读2次吗?如果汉字是2个(如果),就只用再追加一次对么?另外,我的编译器,汉字只有2个字节,我输入“哈哈”,sizeof是5?
最新情况:我发现:无论32、33行,我弄一次还是弄两次,居然都没问题,这是怎么回事啊!!!
- #include <iostream>
- #include <algorithm>
- #include <stdio.h>
- #include <string>
- #include <cstring>
- #define MAX 1024
- using namespace std;
- int main()
- {
- char v1[MAX];
- char v2[MAX];
- char *a = v1;
- char *b = v2;
- fgets(v2, MAX, stdin);
- cout << "个数:";
- int n;
- cin >> n;
- char ch;
- while(n--)
- {
- ch = (*b++ == *a++);
- if(ch == '\0')
- break;
- if((int)ch < 0)
- {
- *a++ = *b++;
- //*a++ = *b++;
- }
- }
- cout << v2;
- }
复制代码
2.第二个问题是:字符数组,用fgets,真实结尾是既有'\0'又有'\n'么?作业是这么说的,因为strcat里面指针-2了,但是如果我数组大小取5,我还是可以顺利读取4个字符,如果既包含'\0',又包含'\n',应该只能读取3个字符呀?
第一个问题:
1 25行开始读的就是target1中的一个字符的值
2 汉字是3个字节,因为前面读了一次,所以还要继续读两次,凑成三个字节
3 如果你的编译器中的汉字是两个字节,那么只要继续读一次
4 最新发现:正常,因为拷贝过程没有实时呈现结果,所以不管你一次读1个还是3个,或者5个,只要不越界,结果就是一样的。
第二个问题:
如果长度不够,就会扔了'\n',溢出的都扔了,比如长度为5,你输入了8个字符,实际只能存放4个
|
|