十几年前刚开始学习C的时候就被这样教过,不过时至今日真正碰上还真的懵了一下。
写下来作个纪念。
Line:0001 char strTmp[4] = {'A','B','C','D'};
Line:0002 cout << strTmp << endl;
的一个输出例:【ABCDフフフフフフフフ100】
因为没有结束字符,所以期待值后面输出一些垃圾数据倒也是可以理解的。
【解决办法】
1. 可能的话当然是声明一个足够大的数组,并保证以\0结尾;
2. 实际的使用时,可能这个数组大小是无法调整的,这时如果想像操作一个“正常”字符数组那样操作它的话,就得自己声明一个大一个字节的数组再对这个新数组进行常规操作了。
Line:0001 char strTmp[4] = {'A','B','C','D'};
Line:0002 cout << "strTmp\t=[" << strTmp << "]" << endl;
Line:0003 char *lpStrTmp = new CHAR[sizeof(strTmp) + 1];
Line:0004 memset(lpStrTmp, NULL, sizeof(strTmp) + 1);
Line:0005 memcpy(lpStrTmp, strTmp, sizeof(strTmp));
Line:0006 cout << "lpStrTmp=[" << lpStrTmp << "]" << endl;
输出结果为:
strTmp =[ABCDフフフフフフフフ100]
lpStrTmp=[ABCD]