我正在用c语言编写代码。将字符串转换为字符串
char a[]={p,r,a,d,e,e,p}
我想在最后添加'0/'
使它字符串。
或者是否有任何方法使其字符串,而不是在最后加入null?char *a=pradeep;
将它转换为字符串通过在年底
我正在用c语言编写代码。将字符串转换为字符串
char a[]={p,r,a,d,e,e,p}
我想在最后添加'0/'
使它字符串。
或者是否有任何方法使其字符串,而不是在最后加入null?
char *a=pradeep;
将它转换为字符串通过在年底
char *a="pradeep";
加入空使一个字符串,并在末尾添加空字符。
如果你真的想使用类似的1语法来声明它,你可以这样做:
char a[] = {'p','r','a','d','e','e','p', 0};
但没有理由这样做。
编辑关于在评论问题
如果你想创建n
字符的字符串您收到,你可以这样做:
char *a = malloc(n*sizeof(char)+1);
如果它总是10个字符或更少,你可以声明为
char a[11];
然后设置每个a[i]
与接收到的值,一个nd最后一个与0
。
你也可以使用sprintf来进行连接,但无论如何你必须确保你有足够的地方分配。
您不能更改数组的大小a
因此您无法向其添加空终止符。您可以将声明更改为:
char a[] = "pradeep";
它将隐式添加空终止符。或者:
char a[] = { 'p', 'r', 'a', 'd', 'e', 'e', 'p', 0 };
但字符串文字更简单,更清晰。大多数(如果不是全部的话)C字符串库函数都需要一个以空字符结尾的字符串。
你的代码没有任何意义,也不会编译。
字符串字面最好使用字符串文字语法编写的:
const char *a = "pradeep";
这将包括终止字符,使得在那您可以用任何的字符串处理函数使用C字符串a
点,打印出, 等等。现在
1). char a[]={'p','r','a','d','e','e','p','\0'};
其阵列含有有效字符串。
2). char *a="pradeep";
这会在结尾处自动追加空格以生成有效的字符串。
如果分配一个文本字符串一个字符阵列,编译器将自动创建与在端部终接'\0'
字符正确的数组:
char a[] = "pradeep";
上面相同书写
char a[] = { 'p', 'r', 'a', 'd', 'e', 'e', 'p', '\0' };
另外,使用阵列是推荐的方式,但上面的第一种替代方案相当于
char *pa = "pradeep";
但是,最后,您不能再使用sizeof
运算符,因为这将返回指针的大小,而不是字符串的长度。关于sizeof
运算符的另一个注意事项,对于前两个示例,它将返回数组的大小而不是字符串的长度,即sizeof
对于字符数组将包含终止字符。
'char * pa = ..'也使得它不可修改,而'char a [] = ...;'是可修改的。 – hmjd
其实有一个特例,你可能需要后者。如果您对普通7位ASCII有特殊的扩展名,则不能相信源代码编辑器中的字体与应用程序具有相同的“扩展ASCII”值。在为嵌入式显示器实现符号表时,我遇到过这样的几次。解决办法是输出ASCII码而不是符号。使用以前的符号,只能通过添加十六进制值来实现。 - > – Lundin
假设我们要将十六进制值为0xAA的字符添加到字符串中。如果我们写“pr \ xAAadeep”,我们会得到一个bug,因为C字符串文字中的一个十六进制序列只能以非十六进制数字结尾。在这种情况下,编译器会将AAadee视为有效的十六进制。所以你的后一个例子逐个字符更安全,不太混乱。 – Lundin
@dystroy,我正在接收一系列字符,将其作为来自rs232的10个字符。在一个变量中接收到的是字符或一组字符的形式。我想让他们成为字符串。 – pradeep