【问题标题】:How to write character to an array of pointers in C? [closed]如何将字符写入C中的指针数组? [关闭]
【发布时间】:2021-01-18 23:24:28
【问题描述】:

您好,以前可能有人问过这个问题,但我找不到问题的答案。

for (int i = 0; i < StrLenght - 1; i++) {       
    if (szPattern[i] == '%') {
        // DO stuff....
    } else {
        szBuffer[i] = szPattern[i];
    }
}

所以,在 if 语句之前一切似乎都很好,我的意思是 szPattern 已正确写入 szBuffer,但是一旦我进入if 语句没有写入 szBuffer.... 我怀疑这是因为以空字符结尾的字符串“\0”.. 知道如何解决这个问题吗? 谢谢.. :)

【问题讨论】:

  • 对于您发布的代码,szPattern 必须是 char 的数组。
  • 是的罗伯特,szBuffer 和 szPattern 都是 char 数组
  • C 标签不适用于C++ 代码
  • 确实,很抱歉,
  • 没有足够的代码。但我确实想知道 szBuffer[] 和 szPattern 是否有不同的长度......如果 '%' 代码在 % 之后拾取另一个字符,就像 sprintf() 格式一样,你的传入 i 和传出 i 变得不同步。在这种情况下,您将需要一个 'b' 缓冲区和 'p' 模式变量,它们会酌情增加。;

标签: c char


【解决方案1】:

你需要

  1. 用于写入szBuffer的单独索引

  2. szBuffer 添加零终止符的代码

喜欢:

int j = 0;  // Index for storing in szBuffer
for (int i = 0; i < StrLenght - 1; i++) {       
    if (szPattern[i] == '%') {
        // DO stuff....
    } else {
        szBuffer[j] = szPattern[i]; // Assign using index j
        ++j;                        // Increment index
    }
}
szBuffer[j]  = '\0';  // Zero terminate 
puts(szBuffer);

【讨论】:

  • 这行得通,你能解释一下为什么吗?
  • @Metio_1993 当您使用i 作为写入szBuffer 的索引时,当szPattern 包含“%”时,字符串中会出现“空洞”。为避免这种情况,您需要一个单独的索引 (j),该索引仅在您实际分配给 szBuffer 时才会增加
猜你喜欢
  • 2013-04-30
  • 2021-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-28
  • 1970-01-01
  • 2014-02-16
  • 1970-01-01
相关资源
最近更新 更多