【问题标题】:Convert Char to String in C在 C 中将字符转换为字符串
【发布时间】:2014-05-02 13:12:43
【问题描述】:

如何在 C 中将字符转换为字符串。我目前正在使用返回字符的c = fgetc(fp)。但我需要在 strcpy 中使用一个字符串

【问题讨论】:

  • 将所有字符存储在一个数组中,然后将\0存储为数组的最后一个元素。就是这样。
  • 您能说得更具体些吗?根据你的描述,你可以试试fscanf(pf, "%s", &buf)
  • int c; c=fgetc(fp)//从文件中逐个字符获取,我需要能够做到 strcpy(buffer,c);
  • 为什么你需要和strcpy()一起使用呢?
  • 我很惊讶这个简单的问题产生了如此多的流量和辩论。解决方案是两行代码。二。我赞成这个问题只是因为他让一群专业人士都摔倒了。

标签: c string char


【解决方案1】:

这是一个工作示例:

printf("-%s-", (char[2]){'A', 0});

这将显示-A-

【讨论】:

    【解决方案2】:

    这是一个老问题,但我想说没有一个答案真正适合 OP 的问题。他想要/需要做的就是:

    char c = std::fgetc(fp);
    std::strcpy(buffer, &c);
    

    这里的相关方面是,strcpy() 的第二个参数不需要是 char 数组/c 字符串。事实上,所有参数都不是 char 或 char 数组。它们都是 char 指针:

    strcpy(char* dest, const char* src);
    

    dest : 一个非常量字符指针
    它的值必须是可写字符数组的一个元素的内存地址(之后至少还有一个元素)。
    src : 一个 const char 指针
    它的值可以是单个 char 的地址,也可以是 char 数组中元素的地址。该数组必须在其剩余元素中包含特殊字符 \0(以 src 开头),以标记应复制的 c 字符串的结尾。

    【讨论】:

      【解决方案3】:
      //example
      char character;//to be scanned
      char merge[2];// this is just temporary array to merge with      
      merge[0] = character;
      merge[1] = '\0';
      //now you have changed it into a string
      

      【讨论】:

      【解决方案4】:

      为了回答这个问题而无需阅读太多其他内容,我会

      char str[2] = "\0"; /* gives {\0, \0} */
      str[0] = fgetc(fp);
      

      您可以在循环中使用第二行与您希望继续使用 char 作为字符串的任何其他字符串操作。

      【讨论】:

        【解决方案5】:

        我用它把字符转换成字符串(一个例子):

        char c = 'A';
        char str1[2] = {c , '\0'};
        char str2[5] = "";
        strcpy(str2,str1);
        

        【讨论】:

          【解决方案6】:

          使用fgetc(fp) 只是为了能够调用strcpy(buffer,c); 似乎不对。

          您可以简单地自行构建此缓冲区:

          char buffer[MAX_SIZE_OF_MY_BUFFER];
          
          int i = 0;
          char ch;
          while (i < MAX_SIZE_OF_MY_BUFFER - 1 && (ch = fgetc(fp)) != EOF) {
              buffer[i++] = ch;
          }
          buffer[i] = '\0';  // terminating character
          

          请注意,这取决于您将阅读少于MAX_SIZE_OF_MY_BUFFER 个字符的事实

          【讨论】:

            【解决方案7】:

            这样的代码应该可以工作:

            int i = 0;
            char string[256], c;
            while(i < 256 - 1 && (c = fgetc(fp) != EOF)) //Keep space for the final \0
            {
                string[i++] = c;
            }
            string[i] = '\0';
            

            【讨论】:

            • 最好输入'\0' 而不是0,因为'\0' 明确表示“我在这里分配终止字符”。
            • 我认为 C 标准宁愿提到 0 而不是 '\0',它只是被解释为 0,但我想这取决于你的编码风格。我最近做了很多字符串操作,我习惯了0,因为它写起来更快^^
            【解决方案8】:

            您可以做很多给定的答案,但如果您只是想这样做以便能够将其与strcpy 一起使用,那么您可以执行以下操作:

            ...
                strcpy( ... , (char[2]) { (char) c, '\0' } );
            ...
            

            (char[2]) { (char) c, '\0' } 部分将临时从字符 c 中生成以空字符结尾的字符串。

            这样您就可以避免为您手中已有的东西创建新变量,前提是您只需要该单字符串一次。

            【讨论】:

            • 这是我能想象到的最复杂的复制字符串的方式。不是我对新手的建议。
            • @CareyGregory 我同意这一点,但我认为我的解释简短易懂;让它对任何人来说都不够晦涩。
            • 很好的建议,但现在,(MSVC:编译为 C++)它给出:“C4576:带括号的类型后跟初始化列表是非标准的显式类型转换语法。”解释了一下here
            【解决方案9】:

            仅供参考,您在 C 中没有字符串数据类型。使用字符数组来存储值并对其进行操作。将变量 c 更改为字符数组,并在循环中使用它来获取值。

            char c[10];
            int i=0;
            while(i!=10)
            {
                c[i]=fgetc(fp);
                i++;
            }
            

            另一种方法是使用指针并动态分配内存并分配值。

            【讨论】:

            • 让你的 char 数组足够大,在末尾添加 '\0' 字符,表示结束标记。
            猜你喜欢
            • 2020-02-20
            • 1970-01-01
            • 2023-03-28
            • 1970-01-01
            • 1970-01-01
            • 2011-02-03
            • 2015-02-18
            • 1970-01-01
            • 2021-05-09
            相关资源
            最近更新 更多