我想将一个字符数组转换为一个字符串。
示例:
char foo[2] = {'5', '0'};
- > char* foo = "50";
在C中执行此操作的最佳方法是什么?问题源于一个更大的问题,我试图从命令行输入中提取子字符串。例如,我想将argv[1][0]
和argv[1][1]
变为一个字符串,这样如果程序像这样运行......
$ ./foo 123456789
我可以将“12”分配给char*
变量。
答案 0 :(得分:3)
类似的东西:
char* foo_as_str = malloc(3);
memset(foo_as_str, 0, 3);
strncpy(foo_as_str, argv[1], 2);
答案 1 :(得分:3)
重写您的示例,因为您无法使用多个文字字符串初始化char[]
:
char foo[3] = { '5', '0', '\0' }; // now foo is the string "50";
请注意,如果foo
要保存字符串"50"
,则数组中至少需要 3 元素:附加元素用于空终止字符,在C字符串中是必需的。
我们
以上相当于:
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';
}
答案 2 :(得分:2)
查看strcat的手册页。介意覆盖常量字符串。
如果你想把字符串在一起形成一个字符串,那么你也可以这样做:
char foo[3];
foo[0] = '1';
foo[1] = '2';
foo[2] = 0;
答案 3 :(得分:1)
要创建一个字符串,您需要在两个字符后面添加一个空终止字节。这意味着它们之后的内存地址需要在您的控制之下,以便您可以写入它而不会弄乱任何其他人。在这种情况下,为此,您需要为字符串分配一些额外的内存:
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
答案 4 :(得分:1)
您可以使用strcat
,但必须确保目标缓冲区足够大以容纳结果字符串。
答案 5 :(得分:0)
尝试使用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]