【问题标题】:argc and argv in C [closed]C中的argc和argv [关闭]
【发布时间】:2018-10-16 18:58:58
【问题描述】:

假设我有这个示例函数

int main(int argc, char** argv) {

        char* pChar = argv[2]; // Get the second argument "Word"
        char * pAdd = pChar + strlen(pChar); // 0 + 5
}

并通过输入 ./fileName Hello World

运行

由于argv[2] = World,pChar应该指向Char“World”的内存地址

但是,我不明白为什么在执行 pChar + strlen(pChar) 行代码时 pChar = 0(这就是书上所说的)。

【问题讨论】:

  • 但是,我不明白为什么在执行 pChar + strlen(pChar) 行代码时 pChar = 0。 你怎么知道 pChar 是 @987654323 @?
  • 你的意思是 *pAdd0 吗?
  • 因为字符串只是“World”,而 C 字符串以 0 结尾。你期望它是什么?
  • “书”——什么书?运行代码,自己看看。这本书要么有错字,要么你误报了它所说的内容。

标签: c argv argc


【解决方案1】:

pChar 不是0

可能的错误: *pAdd0 而不是 pChar,因为 pAdd 指向字符串 "World" 的最后一个字符,即 '\0' 和空终止 ('\0') 的整数值为 0

您想说地址是 0 - 您可能需要阅读:

in c can an address of a pointer be 0

【讨论】:

    【解决方案2】:

    您需要解释或展示您是如何进行观察的。 pChar 不会为零,但它会指向第二个参数末尾的 NUL 字符。即*pChar 将是NUL - 由pAdd 指向的空字符串证明:

    结果是,使用调试器进行观察 - 这是侵入性最小的方法,并且不依赖于您正确编写调试代码

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-11-03
      • 2016-08-11
      • 2020-10-12
      • 2015-08-12
      • 1970-01-01
      • 2017-06-18
      • 2017-08-10
      相关资源
      最近更新 更多