【问题标题】:get updated value from string pointer C从字符串指针 C 获取更新的值
【发布时间】:2020-09-03 11:19:52
【问题描述】:

在这里用 C 弦撕扯我的头发。我在一个项目中有一个函数,它返回一个 char * 指针。

我需要在使用它之前更改该字符串的一个元素。我读到的所有内容都说只使用具有 char[] 格式的 char 数组,但这与我当前状态下的项目不兼容,如果有的话。

我一直在拼命寻找将前 n 个字符复制到第二个 char 指针的方法,添加更新后的值,然后连接不需要 40 行的初始指针的剩余部分(减去更新的原始值)代码。

为此使用 fgetc 的每次尝试都未能将 unsigned int 写入“更新的指针”。我是否需要将 unsigned int 冲刺到 char 缓冲区或其他东西中?为什么感觉如此复杂?

在所需行为的第一步尝试失败的示例:

int main() {
  char *s;
  s = "babado = lubidee = popop =pew"; 
  char * s1;
  s1 = malloc(10);
  memset(s1,'0',9);
  strcpy(s1,fgetc(s));

  for (int i = 0; i<4; i++){
    strcat(s1,fgetc(s));
  }

  printf("%s",s1);

  return 0;
}

【问题讨论】:

  • 看起来sprintf() 可能是一个简单解决方案的一部分,请提供更多详细信息。 你尝试过什么?有哪些输入和相应的输出?
  • 我们需要实际代码供参考。
  • 从您的描述中,听起来您想要一个字符串替换功能,但具体细节还不清楚。例如,您说“减去更新的原始值”,我们是否知道该值是什么或该值有多长,还是我们只知道它从字符 N 开始?如果我们限制新值与原始值具有相同字符长度的问题,解决方案会有所改变(或简化);但也许我们不能做出这样的假设。我也不清楚你为什么使用fgetc,因为你似乎在这里使用不正确。
  • @Unn “我也不清楚你为什么要使用 fgetc” 我也是。可以假定该值,但拆分由位置定义。它是一个基于字符的“位图”,因此字符是从文本文件中读取的 0 或 1,我认为它们的长度相同,所以我们确实知道它从字符 n 开始,尽管稍后为了表示inode 表,我将只有条目号而不是确切的字符位置,但我使用分隔符来分割值,因为可变字符长度的通用解决方案似乎不是一个容易实现的解决方案。
  • 我使用 fgetc 因为我找不到任何简单的方法来使用某种解构来拆分指针,例如 newStr = oldStr[:i] + newValue + oldStr[i:]

标签: c string pointers assign findandmodify


【解决方案1】:

如果你只需要将一个字符串复制到另一个指针,

.
.
char *newptr;
//Allocate memory for new pointer
int i=0;
while(i<n)   //first n characters
    *(newptr+i)=*(returnedptr+i);. //returnedptr is your initial ptr
  //Add new value
i++;
while( *(returnedptr+i)!='\0')
      *(newptr+i)=*(returnedptr+i);
.
.

【讨论】:

  • 谢谢!我读到迭代指针不是一个好主意,因为它会破坏对原始指针的访问,因此以后无法释放它。我可能误解了那个论点吗?
  • 否,但在这种情况下,由于 ptr 的实际值没有改变,您可以释放 ptrs
  • 谢谢!我需要在此结束时手动添加一个空终止符吗?同样,当我尝试将这样构造的指针传递给在具有相同大小的其他 char 指针上正常工作的函数时,我得到“大小为 1 的无效读取”和“地址 0x5324680 在大小为 4,096 的块后为 0 个字节(原始项目代码)alloc'd”(即使没有添加空终止符)。有什么建议吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-09-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多