我想将一组字符转换为一个字符串。
例子:
char foo[2] = {'5', '0'};
-->char* foo = "50";
在 C 中执行此操作的最佳方法是什么?问题源于一个更大的问题,我试图从命令行输入中提取子字符串。例如,我想把argv[1][0]
和argv[1][1]
变成一个字符串,这样如果程序像这样运行......
$ ./foo 123456789
我可以将“12”分配给一个char*
变量。
就像是:
char* foo_as_str = malloc(3);
memset(foo_as_str, 0, 3);
strncpy(foo_as_str, argv[1], 2);
重写您的示例,因为您无法char[]
使用多个文字字符串初始化 a :
char foo[3] = { '5', '0', '\0' }; // now foo is the string "50";
请注意,如果要保存字符串,则数组中至少需要3 个元素:附加元素用于空终止字符,这在 C 字符串中是必需的。我们上面的等价于:foo
"50"
char foo[3] = "50";
但是你不需要这个来提取前两个字符argv[1]
,你可以使用strncpy
:
char foo[3];
foo[0] = '\0';
if ((argc > 1) && (strlen(argv[1]) >= 2)
{
// this copies the first 2 chars from argv[1] into foo
strncpy(foo, argv[1], 2);
foo[2] = '\0';
}
查看strcat的手册页。注意覆盖常量字符串。
如果您只想将字符放在一起形成一个字符串,也可以这样做:
char foo[3];
foo[0] = '1';
foo[1] = '2';
foo[2] = 0;
要创建一个字符串,您需要在两个字符之后添加一个空终止字节。这意味着它们后面的内存地址需要在您的控制之下,以便您可以写入它而不会弄乱其他任何人。在这种情况下,您需要为字符串分配一些额外的内存:
int length = 2; // # characters
char* buffer = malloc(length + 1); // +1 byte for null terminator
memcpy(buffer, foo, length); // copy digits to buffer
buffer[length] = 0; // add null terminating byte
printf("%s", buffer); // see the result
您可以使用strcat
,但您必须确保目标缓冲区足够大以容纳结果字符串。
尝试使用strcat()
.
char *foo[2] = {"5", "0"}; /* not the change from foo[x] to *foo[x] */
size_t size = sizeof(foo) / sizeof(foo[0]);
char *buf = calloc(sizeof(char), size + 1);
if(buf) {
int i;
for(i = 0; i < size; ++i)
strcat(buf, foo[i]);
printf("buf = [%s]\n", buf);
} else {
/* NO momeory. handling error. */
}
输出:
buf = [50]