函数调用后,参数指针不会保留其值[重复]

2024-04-10

我将 3 个指针(key、K1Ptr、K2Ptr)作为参数传递给函数(keyGenerator),但是当函数调用结束时,只有 key 指针保留函数调用中的值,而其他 2 个指针则不保留。

我尝试了很多不同的事情,比如返回一个带有 2 个指针的数组,或者我尝试不使用指针并传递 2 个数组。两次尝试都有相同的结果,在函数调用后没有保留任何值。

char K1[9], K2[9];
char *K1ptr, *K2ptr;

K1ptr = K1;
K2ptr = K2;

keyGenerator(key, K1ptr, K2ptr);

printf("Key. %s\n", key);
printf("K1. %s\n", K1Ptr);
printf("K2. %s\n", K2Ptr);

\

void keyGenerator(char *key, char *K1, char *K2) {

char P10_Left[6];
char P10_Right[6];
char *P10leftPtr, *P10rightPtr;


printf("Starting key: %s\n", key);

//P10 Operation first step
P10_swap(key);
printf("P10swap key: %s\n", key);

//Initializing the left and right arrays
int i;
for(i=0;i<5;i++) {

    P10_Left[i] = key[i];
    P10_Right[i] = key[i+5];
}
P10_Left[5] = '\0';
P10_Right[5] = '\0';

P10leftPtr = P10_Left;
P10rightPtr = P10_Right;

//The left half shift
LS(P10leftPtr, 1);
//The right half shift
LS(P10rightPtr, 1);


//P8 swap starts here
K1 = P8_swap(P10leftPtr, P10rightPtr);

printf("K1 key: %s\n", K1);
//P8 swap ends here


//After we find K1 we need to shift the 2 halves again, 2 times to the left this time
//The left half shift
LS(P10leftPtr, 2);
//The right half shift
LS(P10rightPtr, 2);


//After the 2 shifts we use P8 operation again on the new halves
//P8 swap starts here
K2 = P8_swap(P10leftPtr, P10rightPtr);

printf("K2 key: %s\n", K2);
//P8 swap ends here

} //

char* P8_swap(char *left_key, char *right_key) {

int P8[8] = {6, 3, 7, 4, 8, 5, 10, 9}; //key possitions after P8 operation
char P8_Output[9];
char *K1; //They key after the P8 swap
char keyLR[11]; //The left and right halves will be stored together here

int i;

//The two halves become one so that we can do the P8 swap
for(i=0;i<5;i++) {
    keyLR[i] = left_key[i];
    keyLR[i+5] = right_key[i];
}

//P8 swap
for(i=0; i<8; i++) {
    P8_Output[i] = keyLR[P8[i]-1];  //P10[i] - 1 because the possitiongs in P10 are from 1-10 and not 0-9
}

P8_Output[8] = '\0';

K1 = P8_Output;

return K1;

}

在函数 keyGenerator 之后,当我打印 K1Ptr 和 K2Ptr 时,我什么也没得到,但我期望获得存储在函数内的值。


在这一行中:

K1 = P8_swap(P10leftPtr, P10rightPtr);

你改变了的值K1但这种变化是local到函数并且不会改变值K1ptr in main.

如果你想改变的值K1ptr in main你需要通过一个指向K1ptr到函数。然而,当你初始化时,这看起来有点奇怪K1ptr指向字符数组K1[9]。我的猜测是,您不想更改函数中的指针值,而只是将一些数据复制到“指向”数组中。

BTW:

Your P8_swap是错的。你返回一个指向P8_Output这是一个局部变量。千万不要那样做!当函数返回时,局部变量超出范围(也称为不再存在),因此返回的指针指向非法内存。如果你真的想要这样的东西,你必须使用动态内存分配。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

函数调用后,参数指针不会保留其值[重复] 的相关文章

随机推荐

  • 使用 boost::karma 格式化纬度/经度字符串

    我需要格式化double值转换为具有非常特定格式的坐标字符串 DDMMSS SSX where DD 是完整的学位 MM 是完整的分钟 SS SS 是带有小数的秒 X 是 N 或 S 具体取决于半球 这些字段需要用零填充 不能接受空格 格式
  • Service Worker 注册时出错

    我正在尝试注册服务工作者 但出现以下错误 注册ServiceWorker失败 当前的URL协议 不支持原点 null 我在 localhost 下使用 Node js 我有我的索引 html and service worker js在同一
  • 使用 es2017 的 async wait 重构 Promise 和 Promise.all

    我有一个照片上传处理程序的工作版本 但我想看看它如何与异步等待一起工作 在下面的内容之前是我使用 Promise 的工作代码 onChangePhotos e gt e preventDefault let files e target f
  • 如果单元测试失败则 make 失败

    我有一个用于编译静态库的 makefile 该生成文件具有编译与静态库关联的单元测试套件的规则 编译测试套件后 将调用 python 脚本来运行测试并记录结果 它看起来像这样 unit MAKE C cXbase unit python T
  • 如何在ssl连接期间加载客户端证书以进行相互身份验证?

    我无法在 ssl 连接上加载客户端证书 以便服务器可以对其进行身份验证 可能是什么问题 LoadCertificates 函数可以正常加载服务器证书 我能够在客户端获取服务器证书 但无法在服务器端获取客户端证书 我还想验证证书是否由正确的
  • Javascript?:如何动态添加文本输入/表单字段到 HTML 表单?

    我正在构建一个网络表单 其中有一个输入列表 到目前为止 一切都很好 但是 如何添加链接 按钮以将另外 5 个字段添加到列表中 例如
  • Xcode 4 卡在“扫描工作副本”上

    我刚刚归档并提交了一个项目 当我返回打开该项目时 它挂在 扫描工作副本 上 我可以导航 但无法查看项目文件 这实际上只是一个链接问题 选择您的项目并确保您已打开 身份和类型 它位于右侧编辑器栏中 使用 查看 按钮切换打开和关闭 您可以在那里
  • FFmpeg 支持哪些编解码器和格式? [关闭]

    Closed 这个问题是与编程或软件开发无关 help closed questions 目前不接受答案 我需要 FFmpeg 支持的编解码器和格式列表 我在哪里可以找到它 正确的编解码器 ffmpeg codecs Formats ffm
  • findOrCreate 与 include -sequelize.js

    我想创建一个比赛 如果不存在 以及Match 如果不存在 与锦标赛关联 let match created await Match findOrCreate where scoreHome 97 Tournament name USA So
  • PhpStorm 资源根的相对路径

    我使用 PhpStorm 9 并且我的项目结构与此类似 src elements element alfa element alfa html element alfa scss templates application html ind
  • 无法删除 nav_host_fragment 顶部的空间

    我刚刚实现了底部导航 AS 的默认设置 文件 gt 新建 gt 活动 gt 底部导航活动 除了顶部的空格之外 一切都很好nav host fragment 由于它是在 ConstraintLayout 中生成的 我尝试清理约束并设置顶部约束
  • 为什么 file_get_contents 不起作用?

    为什么file get contents not为我工作 在下面的测试文件代码中 似乎我搜索过的每个示例都列出了此函数 但它从未被执行 这是网络托管服务的问题吗 有人可以在他们的服务器上测试这段代码只是为了看看地理编码数组输出是否真的作为字
  • 无法通过 ngrok ssh 进入远程 Linux

    远程Linux计算机位于内部网络中 没有公共IP地址 所以我安装了ngrok ngrok tcp 22 ngrok by inconshreveable Ctrl C 退出 在线隧道状态版本2 0 19 2 0 17网页界面http 127
  • 如何在 django 评论中包含用户个人资料的图像/徽标

    我已将其发布在 django users 上 但尚未收到回复 所以我有自己的用户配置文件对象 用户的子类 其中一个字段是 imagefield 它 显然 用于用户上传他们的徽标 缩略图 问题是我如何才能将其包含在他们的评论中 有任何想法吗
  • phpMyAdmin 4.0.5 导出错误错误 - 有人知道它是否正在得到解决吗?

    phpMyAdmin 宣布 在 2013 年 9 月 1 日的几天内 他们将关闭其他资源 例如邮件列表和论坛 并推迟我们使用 StackOverflow StackExchange 我为小型 cPanel 托管服务提供一般支持 我的部分职责
  • Entity Framework Core - 未找到设计时服务

    我有一个非常基本的迁移文件 我正在执行dotnet ef database update verbose在包管理器控制台窗口中 SQL Server 中没有生成任何内容 包管理器控制台窗口中的最后几行输出如下所示 Finding desig
  • Nexus 5 上启动器图标的实际大小是多少?

    As the doc http developer android com design style iconography html launcher提到的 启动器图标是48 48dp 所以我认为我的 Nexus 5 上的启动器图标应该是
  • 更新列表框而不丢失所选项目,WPF

    列表框每秒更新一次 在工作期间 我需要选择其中的一些项目并执行命令 这是不可能的 因为列表框已更新并丢失了其选定的项目 ObservableCollection 是我列表中的 ViewModel 我心里有一些选择 也许还有更好的解决方案 检
  • 如何使用带有数据绑定的 Ext5 组合框

    我想使用一个组合框 它从数据绑定接收预选值 并且还从同一存储的数据绑定接收可能的选项 面板项配置如下所示 xtype combobox name language default fieldLabel Default Language mu
  • 函数调用后,参数指针不会保留其值[重复]

    这个问题在这里已经有答案了 我将 3 个指针 key K1Ptr K2Ptr 作为参数传递给函数 keyGenerator 但是当函数调用结束时 只有 key 指针保留函数调用中的值 而其他 2 个指针则不保留 我尝试了很多不同的事情 比如