字符串到C中的字符串?

时间:2012-08-13 22:03:54

标签: c string

我想将一个字符数组转换为一个字符串。

示例:

char foo[2] = {'5', '0'}; - > char* foo = "50";

在C中执行此操作的最佳方法是什么?问题源于一个更大的问题,我试图从命令行输入中提取子字符串。例如,我想将argv[1][0]argv[1][1]变为一个字符串,这样如果程序像这样运行......

$ ./foo 123456789

我可以将“12”分配给char*变量。

6 个答案:

答案 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]