【发布时间】: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 变量有什么区别?