首先引入一段代码,const char * 如何赋值给char *
const char *expr = "goodidea";
char *buf = new char[strlen(expr)+1];
strcpy(buf, expr);
之前一直搞不懂,为什么strlen(expr) + 1还要加1。发现不加1,或者减1,都不会报错,结果都是一样没报错。
后来在写项目的时候遇到了坑。下面把代码列出来。
const char *source = env->GetStringUTFChars(source_, 0);
const char *key = env->GetStringUTFChars(key_, 0);
char * inHex = (char *) malloc(16 * sizeof(char));
char * keyHex = (char *) malloc(16 * sizeof(char));
strcpy(inHex, source);
strcpy(keyHex, key);
LOGE("inArr=%s", source);
LOGE("keyArr=%s", key);
LOGE("inHex=%s", inHex);
LOGE("keyHes=%s", keyHex);
上面,source_的字符串值为0102030405060708,key的字符串值为1111111111111111。
上述的代码输出的结果为
01-07 12:12:55.178 8905-8905/com.kv.des3 E/xx: inArr=0102030405060708
01-07 12:12:55.178 8905-8905/com.kv.des3 E/xx: keyArr=1111111111111111
01-07 12:12:55.178 8905-8905/com.kv.des3 E/xx: inHex=01020304050607081111111111111111
01-07 12:12:55.178 8905-8905/com.kv.des3 E/xx: keyHes=1111111111111111
于是去百度了一遍,还是不太明白,后来发现字符串最后有一个‘\0’为结束符,在此记录一下,避免后面会再采坑。