【问题标题】:How to extract the first X characters of a string and use them into another in C [duplicate]如何提取字符串的前X个字符并将它们用于C中的另一个[重复]
【发布时间】:2020-03-16 19:26:15
【问题描述】:

我已经制作了这个函数来提取字符串的前 2 个字符:

string get_salt(string hash)
{
    char pre_salt[2];

    for (int i = 0; i < 2; i++)
    {
        pre_salt[i] = hash[i];
    }
    string salt = pre_salt;
    printf("%s\n", salt);
    return(salt);
}

但是当我使用一个以“50”(我正在使用的示例)作为前 2 个字符的字符串运行它时,我会得到以下输出:

50r®B

老实说,我不知道为什么要在结果字符串中添加 3 个额外字符。

【问题讨论】:

  • 这是 C 还是 C++?
  • C 中的字符串需要 NUL 终止。确保pre_salt 比字符数大一并确保最后一个元素为0。
  • 缺少零终止符,C 也没有“字符串”类型,所以函数不能返回一个。如果您使用“string”作为“char*”的同义词,那么您的函数将返回一个超出范围的本地。
  • 刚刚尝试将 '\0' 添加到 sting 的最后一个元素并成功了!我正在使用一个包含字符串数据类型的库,所以即使我使用的是 C,我也可以将字符串类型变量作为输入或输出传递给函数。我有一个问题,声明 char* 变量而不是 char 变量有什么区别?

标签: c hash salt crypt


【解决方案1】:

您缺少字符串的 NUL 终止符 '\0',因此它会一直打印,直到找到一个为止。 声明如下:

char  pre_salt[3]={0,0,0};

问题解决了。

【讨论】:

  • 可能仍会返回一个指向将超出范围的本地指针。
  • 我使用了这个的轻微变化 :) 我将 pre_salt 初始化为大小 3,在 for 循环之后,我在最后一个元素中添加了一个 '\0'。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-30
  • 2012-08-28
  • 1970-01-01
  • 1970-01-01
  • 2013-01-20
  • 1970-01-01
相关资源
最近更新 更多