【问题标题】:How to concatenate strings in a for-loop?如何在for循环中连接字符串?
【发布时间】:2016-09-12 16:30:12
【问题描述】:

我在 C 中使用循环并试图确定 fprintf 的工作原理。

fprintf(out, "%02X", (int)(ch & 0x00FF); 

此语句为循环的每次迭代打印出一个十六进制值 char。

我可以将它存储在变量或字符数组中吗?

如何将其连接成一个大字符串,然后将其写入文件?

我是否必须检查迭代的总大小,并在开始时将 char 数组设置为循环的正确大小,然后附加到这个?

【问题讨论】:

  • 你希望它打印什么?
  • 我希望将每次迭代的每个十六进制值存储在一个长字符串中,我可以一次打印出来(在循环结束时)
  • 目前它为每次迭代打印一个十六进制值 - 这是预期的,但我想在最后将其更改为一个输出。
  • @Ke 有什么问题吗?是吗,如何存储值?或者如何使它们成为十六进制字符?
  • 听起来您可能想使用sprintf() 代替:cplusplus.com/reference/cstdio/sprintf "如果在 printf 上使用格式,则使用与打印相同的文本组成一个字符串,但不是打印,而是内容作为 C 字符串存储在 str 指向的缓冲区中。”

标签: c arrays printf string-concatenation


【解决方案1】:

也许这会有所帮助。

程序需要多个十进制输入(最多 50 个)。它打印相应的十六进制值并将字符附加到字符串(以零结尾的字符数组)。最后,它打印字符串。

#include <stdio.h>

int main(void) {
    const int N = 50;
    int i = 0;
    char text[N+1];  // Make an array to hold the string
    text[0] = '\0';  // Zero terminate it
    int ch;

    while(i < N)
    {
        if (scanf("%d", &ch) != 1)  // Read decimal from stdin
        {
            break;                  // Break out if no decimal was returned
        }
        printf("%02X ", (ch & 0x00FF));

        text[i] = (ch & 0x00FF);  // Add the new char
        text[i+1] = '\0';         // Add a new string termination
        ++i;

    }
    printf("\n");

    printf("%s\n", text);
    return 0;
}

输入:

65 66 67 68

输出:

41 42 43 44

ABCD

或者这个替代方案,它逐个字符地读取字符串,直到看到换行符:

#include <stdio.h>

int main(void) {
    const int N = 50;
    int i = 0;
    char text[N+1];
    text[0] = '\0';
    char ch;

    while(i <= N)
    {
        if (scanf("%c", &ch) != 1 || ch == '\n')
        {
            break;
        }
        printf("%02X ", ch);
        text[i] = ch;
        text[i+1] = '\0';
        ++i;
    }
    printf("\n");

    printf("%s\n", text);
    return 0;
}

输入:

编码很有趣

输出:

63 6F 64 69 6E 67 20 69 73 20 66 75 6E

编码很有趣

【讨论】:

  • 我想知道第一个是如何工作的?我注意到有一个“输入”,我如何将此输入输入到主函数中进行处理?此外,由于在每个字符后添加了 \0,char 数组的大小是否需要两倍于大小?
  • @Ke。 scanf("%d", &amp;ch) 从标准输入读取一个整数。如果返回值为 1(即成功),则读取的值存储在 ch 中。数组不需要是双倍大小。只有 1 个终端。因此数组大小为N+1,因此它可以容纳 N 个字符和 1 个终止符。
【解决方案2】:

我不太确定你想做什么,但你可以检查我为你做的这段代码,也许可以扩展它。

#include <stdio.h>
#include <string.h>

int main (void)
{


  char buff[2056];
  char out[255];
  char ch ='a';

  sprintf(out, "%02X", (int)(ch & 0x00FF) ); 

  strcpy(buff,out);
  printf("%s",buff);



  return 0;
}

【讨论】:

    猜你喜欢
    • 2015-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-05
    • 1970-01-01
    • 1970-01-01
    • 2017-01-30
    • 2018-09-02
    相关资源
    最近更新 更多