char[]数组该如何赋值
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了char[]数组该如何赋值相关的知识,希望对你有一定的参考价值。
比如有这段代码
int a = 10;
int b = 20;
int c = 30;
char con[3];
memset(con,0,3);
con[0] = a;
con[1] = b;
con[2] = c;
int s = 0;
char c_con2[20];
memset(c_con2,0,20);
for (int i = 0;i < 3;i++)
c_con2[s] = con[i];
c_con2[s+1] = ',';
s = s + 2;
CString cs_con = "";
cs_con.Format(_T("%s"),c_con2);
我的目的是想由3个int值得到一个字符串CString = “10,20,30”,但是现在得到的是乱码,正确的该怎么写啊。
怎么给这个数组赋值呢?
1、定义的时候直接用字符串赋值
char a[10]="hello";
注意:不能先定义再给它赋值,如char a[10]; a[10]="hello";这样是错误的!
2、对数组中字符逐个赋值
char a[10]=\'h\',\'e\',\'l\',\'l\',\'o\';
3、利用strcpy
char a[10]; strcpy(a, "hello");
易错情况:
1、char a[10]; a[10]="hello";//一个字符怎么能容纳一个字符串?况且a[10]也是不存在的!
2、char a[10]; a="hello";//这种情况容易出现,a虽然是指针,但是它已经指向在堆栈中分配的10个字符空间,现在这个情况a又指向数据区中的hello常量,这里的指针a出现混乱,不允许!
main()
char s[30];
strcpy(s, "Good News!"); /*给数组赋字符串*/ .
上面程序在编译时, 遇到char s[30]这条语句时, 编译程序会在内存的某处留出连续30个字节的区域, 并将第一个字节的地址赋给s。当遇到strcpy( strcpy 为Turbo C2.0的函数)时, 首先在目标文件的某处建立一个"Good News!/0" 的字符串。其中/0表示字符串终止, 终止符是编译时自动加上的, 然后一个字符一个字符地复制到s所指的内存区域。因此定义字符串数组时, 其元素个数至少应该比字符串的长度多1。 参考技术A #include <stdio.h>
#include<string.h>
int main()
int a = 10;
int b = 20;
int c = 30;
char con[3][3];
sprintf(con[0],"%d",a);
sprintf(con[1],"%d",b);
sprintf(con[2],"%d",c);
char c_con2[20];
memset(c_con2,0,20);
for (int i = 0;i < 3;i++)
strcat(c_con2,con[i]);
strcat(c_con2,";");
printf("%s\\n",c_con2);
输出:10;20;30;
追问现在int a = 10,如果int a = 1024;那 char con[3][3][3][3];?
追答char con[3][5]
3表示需要存储3个字符串,5表示每个字符串长度为5。
明白了,谢谢了
本回答被提问者采纳如何将String类的字符串 赋值给Char数组
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(); 参考技术A 有几种方法。
1.
使用string类的c_str()函数strcpy(str,string.c_str());
2.
for循环实现
for(i
=0
;i
<
string.size();i++)
str[i]
=
string.at(i);
3.
使用string类的copy函数
string.copy(str,0,string.size()); 参考技术B 有几种方法。
1.
使用string类的c_str()函数strcpy(str,string.c_str());
2.
for循环实现
for(i
=0
;i
<
string.size();i++)
str[i]
=
string.at(i);
3.
使用string类的copy函数
string.copy(str,0,string.size());
以上是关于char[]数组该如何赋值的主要内容,如果未能解决你的问题,请参考以下文章