【发布时间】:2022-01-04 09:07:57
【问题描述】:
我正在研究一种小型加密算法:
转换:
input = 356307042441013 to output = 333536333037303432343431303133
它的工作原理是这样的: 如果一个数字等于 3 ,它将用 333 更改它,除非它位于字符串的最后一个位置。 如果不是,我们在每两个不同于 3 的数字之间加 3
input = 3 5 6 3 0 7 0 4 2 4 4 1 0 1 3
to
output = 333 5 3 6 333 0 3 7 3 0 3 4 3 2 3 4 3 4 3 1 3 0 3 1 3 3
为此,我编写了以下代码:
int main() {
const char *imei = "362162356836934568";
char *imei_buffer;
strcpy(imei_buffer,'\0');
int i = 0;
while (i < strlen(imei))
{
if (i <= (strlen(imei) - 1))
{
if (imei[i] == '3')
{
strcat(imei_buffer, "333");
}
else if ((imei[i] != '3') && (imei[i + 1] == '3'))
{
strcat(imei_buffer, &imei[i]);
//strcat(imei_buffer,'3');
}
else if ((imei[i] != '3') && (imei[i + 1] != '3'))
{
strcat(imei_buffer, &imei[i]);
strcat(imei_buffer, "3");
}
}
else if (i == strlen(imei))
{
if (imei[i] == '3')
{
strcat(imei_buffer, "333");
}
else if (imei[i] != '3')
{
else if (i == strlen(imei))
{
strcat(imei_buffer, &imei[i]);
//strcat(imei_buffer,'3');
}
i++;
}
printf("imei_buffer : %s",imei_buffer);
return 0;
}
代码执行没有错误,但最后没有显示结果。
在这个实现中我可能哪里出错了?
【问题讨论】:
-
这不是字符串/数组在 C 中的工作方式。您不能“将数据存储在指针中”。在此处查看链接的副本以及初学者的字符串常见问题解答:Common string handling pitfalls in C programming
-
@Othmane 此代码 sn -p char *imei_buffer; strcpy(imei_buffer,'\0');调用未定义的行为
-
我尝试使用普通的字符数组[],但效果不佳。
-
是的,没错,vs code 和 gcc 没有显示该错误。我想这与 gcc 版本有关。
-
@Othmane 不,它与未定义的行为有关 = 发生随机错误,或者程序可能看起来工作正常,即使它有潜在的错误。它与编译器无关,分配内存并仅将数据复制到分配的内存中是程序员的责任。
标签: c algorithm encryption undefined-behavior c-strings