【问题标题】:How to transfer int variable addresses in C?如何在C中传输int变量地址?
【发布时间】:2019-11-19 13:52:41
【问题描述】:

我想将int内存从一个程序转移到另一个程序:

这就是我获得int 内存分配的方式,我想打印它:

ioresult main (char *params) {
  int year=0, month=0, day=0, hour=0 ,min=0, i=0;
  char * token;
  char *p = params;

  printf("DateMethod: %s\n",params);
  token = strtok(params, " ");

   while( token != NULL ) {
      printf( " %s\n", token );

      if(i == 0) {
        year = (void *)(strtol(token, NULL, 0));
      } else if(i == 1) {
        month = (void *)(strtol(token, NULL, 0));
      } else if(i == 2) {
        day = (void *)(strtol(token, NULL, 0));
      } else if(i == 3) {
        hour = (void *)(strtol(token, NULL, 0));
      } else if(i == 4) {
        min = (void *)(strtol(token, NULL, 0));
      }

      token = strtok(NULL, " ");

      i++;
   }

  printf("Method Date: %d-%02d-%02d %02d:%02d\n", year, month, day, hour, min);

  return S_OK;
}

params 打印给我看:

DateMethod: 0x904 0x905 0x906 0x907 0x908

但在另一个printf 我明白了:

Method Date: 2309-2310-2311 2312:00

这不是 int 中的值。知道是什么问题吗?

【问题讨论】:

  • 如果您的输入字符串有十六进制数据为0x904,那么strtol 无法解析。
  • 为什么要将值转换为(void *)
  • main 的原型是 int main(int argc, char* argv[]),将 strtol 的结果转换为 (void*) 很奇怪,将转换结果分配给 int 更奇怪(并且不应该编译)。
  • "我想将 int 内存从一个程序转移到另一个程序" 嗯?这与这段代码有什么关系?我不明白你在做什么。您要解决的问题是什么?通过 IPC 传输整数?
  • 代码与问题不对应,声称的输出与代码不对应。

标签: c pointers memory-address


【解决方案1】:

您的程序没有太多意义,但在这里您可以打印您想要的版本,没有奇怪的演员表https://godbolt.org/z/TKwxzR

您不能传递局部变量的地址,因为这些变量仅在函数执行时存在。它们在函数返回时被删除。再次调用该函数时,自动变量的地址可以不同。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-24
    • 1970-01-01
    相关资源
    最近更新 更多