【问题标题】:Offsetting Pointer to String in C在C中偏移指向字符串的指针
【发布时间】:2021-12-23 12:18:36
【问题描述】:

我正在尝试打印字符串的 80 个字符,增加 80 个字符,然后再打印 80 个字符。

目前这一行: offset = myString + 80; 只是指向 myString 数组的开头,而不是指向 myString[80]。我希望它打印不同的结果,但我的输出两次都是一样的。

结果输出:在 vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis praese

#include <stdio.h>

void main()
{
    char myString[1024] = "At vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis praeseAt vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis praesentium voluptatum. Itaque earum rerum hic tenetur a sapiente delectus, ut aut reiciendis voluptatibus maiores alias consequatur aut perferendis doloribus asperiores repellat.";
    char buf[80];
    char* offset;

    sscanf(myString, "%80c", buf);
    fwrite(myString , 1 , 80 , stdout);

    printf("\n");

    offset = myString + 80;
    sscanf(offset, "%80c", buf);
    fwrite(offset , 1 , 80 , stdout);
}

【问题讨论】:

  • 您为什么认为该行正在复制数组?你怎么检查?你具体测试了什么,结果是什么,你期望的结果是什么?
  • 不是复制,但我的偏移量指针指向 myString 的内存位置。我通过在将偏移设置为 myString + 80 后单独打印偏移来检查这一点。我的预期结果是将偏移设置为指向 myString[80],然后读取 myString 的下 80 个字符。实际发生的是它只打印与以前完全相同的 80 个字符。
  • inc(a);a = a + 1;
  • myString 不是硬编码为索引 0-79 和索引 80-159 相同吗?看起来一样。
  • 如果你有一个字符串 "abcdabcd" 并且你打印索引 0-3 和索引 4-7 它们看起来是一样的。这就是你在这里所做的。

标签: c string pointers


【解决方案1】:

myString 中的前 80 个字符与接下来的 80 个字符相同,因此两次看到相同的内容是有道理的。

此外,对sscanf 的调用正在将offset 的80 个字节写入buf。没有真正的需要,因此您可以将其删除。

【讨论】:

  • 字符串从我的屏幕上消失了,所以我没有意识到我的字符串出错了。抱歉,感谢您的澄清。
猜你喜欢
  • 2011-04-12
  • 1970-01-01
  • 2021-06-28
  • 2013-02-16
  • 2015-05-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-24
相关资源
最近更新 更多