4
回答
c语言问题,
我有一组的字符串“123” “456” “789”
他们原来的存储方式是 123','456','789 ,其中 ',' 是分隔符
现在要把这写字符串都放在一起,char *dbuf;并且把','转换为\0
也就是说想把他们都存储的char * dbuf里面,其中的字符串之间的分隔符是'\0',dbuf的最后也要加上一个‘\0’表示整个字符串列表结束。 现在要计算dbuf的长度,
len(dbuf) = strlen("123")+1+strlen("456")+1+strlen("789")+1+1
转换的部分还没写,计算长度的代码,大致如下
int main()
{
char dbuf[1024]="123\x00456\x00789\x00\x00";
int len = 0;
int i=0;
int n=0;
while (dbuf[i] !='\x00' || dbuf[i+1]!='\x00')
{
printf("%s\n", dbuf+i);
len += strlen(dbuf+i) + 1;
n++;
i+=len;
}
printf("len = %d, n=%d, i=%d \n", len ,n , i);
return 1;
}
现在代码报错,
test.cpp:8:21: 警告: 16 进制转义序列越界 [默认启用]
程序结果是
123V�
len = 6, n=1, i=6
估计是转义\x00后面还跟着数字,造成错误
如果写成这样,即加上空格,会正常,但是加上空格就多了额外的数据
char dbuf[1024]="123\x00 456\x00 789\x00\x00";