char *p="abcdefgh";p+=3;printf("%d\n",strlen(strcpy(p,"ABCD...
发布网友
发布时间:2024-03-05 08:14
我来回答
共2个回答
热心网友
时间:2024-09-25 18:53
因为ABCD后面有\0,\0是结束字符,后面的所以是4,即strlen("ABCD");
热心网友
时间:2024-09-25 18:53
char*转换
Qt下面,字符串都用QString,确实给开发者提供了方便,想想VC里面定义的各种变量类型,而且函数参数类型五花八门,经常需要今年新那个类型转换
Qt再使用第三方开源库时,由于库的类型基本上都是标准的类型,字符串遇的多的就是Char*类型
在Qt下怎样将QString转char*呢,需要用到QByteArray类,QByteArray类的说明详见Qt帮助文档。
因为char*最后都有一个‘/0’作为结束符,而采用QString::toLatin1()时会在字符串后面加上‘/0’
方法如下:
Qstring str;
char* ch;
QByteArray ba = str.toLatin1();
ch=ba.data();
这样就完成了QString向char*的转化。经测试程序运行时不会出现bug
注意第三行,一定要加上,不可以str.toLatin1().data()这样一部完成,可能会出错。
补充:以上方法当QString里不含中文时,没有问题,但是QString内含有中文时,转换为char*就是乱码,采用如下方法解决:
方法1:
添加GBK编码支持:
#include <QTextCodec>
QTextCodec::setCodecForTr(QTextCodec::codecForName("GBK"));
QTextCodec::setCodecForLocale(QTextCodec::codecForName("GBK"));
然后改变上面的第三行为:QByteArray ba = str.toLoacl8Bit(); toLoacl8Bit支持中文
方法2:
先将QString转为标准库中的string类型,然后将string转为char*,如下:
std::string str = filename.toStdString();
const char* ch = str.c_str();
...efgh"; p+=3; printf("%d\n",strlen(strcpy(p,"ABCD")));_百度...
strcpy是复制字符串,将逗号后面的字符串复制到逗号前指针所指向的位置。所以P中存储的是ABCD4个字符返回字符串长度4(不计行尾符)。
...abcdefgh";p+=3;printf("%d\n",strlen(strcpy(p,"ABCD"))); 为什...
因为ABCD后面有\0,\0是结束字符,后面的所以是4,即strlen("ABCD");
...efgh"; p+=3; printf("%d\n",strlen(strcpy(p,"ABCD")
首先strcpy(p,"ABCD")这句是说。将ABCD赋值个p,他们之间是怎么赋值的呢,让p指针指向“A”的地址,如果取值的话就*P拿到A了。这个函数返回的值是目标串的地址,也就是p啦,那么p是个指针怎么算地址的长度呢,其实就是strlen("ABCD")啦,为什么,计算机知道的啦,因为p指向了“ABCD”首地址了,...
C语言char *p=“abcde/Ofghjik/0”; ??printf(“%d/n”,strlen(p...
应该是"abcde\0fghijk\0"吧 对于strlen是读取字符串个数,碰到\0就结束 参考:strlen的结果要在运行的时候才能计算出来,主要用来计算字符串的长度,不是类型占内存的大小,strlen只能用char*做参数,且必须是以''\0''结尾的。1、第二个元素就是\0 所以得到字符串长度为1 2、\t \v \\都是转义...
C语言 char *p="abcde"; printf("%s",p);正确;;;char *p="abcde"; pr...
语句printf("%s",*p);会出错,因为%s表示输出字符串,而*p则是指向的字符串的第一个字符,请改成printf("%c",*p);则输出a,改成printf("%d",*p);则输出97,原因分析:char *p="abcde",则字符指针p指向字符串,p的值就是字符串首字符的地址,*p就是第一个字符。
有点蒙了,char *p="abcdefgh",sizeof(p)居然是4我记得应是字符串的...
sizeof(p)的时候是对char *这样一个指针类型进行sizeof,当然是4。字符串长度用strlen。或者char [n]的时候可以用sizeof。
c语言 main() { char *p="abcdefgh",*r; long *
而 p 指针 指数加 1,指向的地点 只加1 bytes 因为,sizeof(char) 等于 1,sizeof(long) 等于4.q++; // 指向的地点 加了 4 bytes,也就是 越过了 abcd r=(char *)q; // 把现在q 指向的地点 给 char r 指针,作为 r 指针的首地址。printf("%s",r); // 按字符形式 打出: ...
char *p, s[ ]= "abcdefgh";p=s;其中P=S如何理解?麻烦详细讲讲_百度...
P指针指向这个字符串的首地址
...dcdbe","abbd","cd"}; printf("%d\n",strlen(p[4])); }
strlen(p[4])表示指针p中第五个数组的长度(0、1、2、3、4所以为第五个)在定义的指针p中第五个数组为“cd"所以输出结果为2
...p++; return(p-s); } main() {printf("%d\n",f("ABCDEF")
char *p=s;// 下面的 while 循环的意思是:// 当指针 p 指向的 s 中的字符【不是 "\0"】// 则指针 p 指向字符串中的下一个字符,循环继续 //你应该认识 "\0" 了,它就是一个字符串结束的标志符号 while (*p != '\0')p++;//退出上面的 while 循环到达这里的时候,//指针 p 【...