【问题标题】:Pointers on string assignement. Error: expression is unassignable [duplicate]字符串赋值的指针。错误:表达式不可分配[重复]
【发布时间】:2019-09-23 08:45:19
【问题描述】:

我正在尝试从知道其位置的字符串中删除一个字符。我知道有很多方法,但是我尝试过的方法会在附加代码的第 4 行的标题中产生错误。我尝试的目的是使旧字符上的指针指向字符串的下一个字符。有人可以帮我理解这个问题吗?

char* remove_char(char str[], int pos)
{
  str = str[pos] + str;
  if (pos < strlen(str)-1)
    &(str[pos]) = &(str[pos+1]);
  else 
    str[strlen(str)-1] = 0;
  return str;
}

【问题讨论】:

  • 您可能只需要删除 & 乱码并执行 str[pos] = str[post+1]; 作为经验法则,切勿通过反复试验进行编程。在代码似乎可以正常工作之前,随意使用 & 或 * 是不明智的做法。
  • @Lundin 这不是随机的。您的解决方案不起作用,因为它将字符替换为下一个字符,并且字符串中的下一个字符是下一个字符的 2 倍。我在这里尝试做的是分配指针而不是它们的对象。
  • @dandan78 thx 我会调查的
  • 我什至不知道你想做什么。这里没有“指针”(复数),只有一个指针。 str 是一个数组,它在传递给函数时会衰减为本地指针。您可以随意摆弄该指针,它不会影响原始数组。至于取随机字符的地址,不会产生可修改的指针。

标签: c string pointers


【解决方案1】:

这太复杂了。这是一个可行的解决方案:

char* remove_char(char *str, int pos)
{
    memmove(str+pos, str+pos+1, strlen(str+pos+1) + 1);
    return str;
}

请注意,我使用的是memmove 而不是memcpy。这在缓冲区重叠时很重要。

在您的代码中,声明 str = str[pos] + str; 只是一派胡言。添加指向字符的指针是没有意义的。有关字符串连接的信息,请参阅以下链接:

How do I concatenate two strings in C?

How do I concatenate const/literal strings in C?

【讨论】:

  • 我想我可以用它作为连接来向字符串添加一个字符
  • @JanSnoeijs 我添加了有关连接信息的链接
猜你喜欢
  • 1970-01-01
  • 2020-07-25
  • 1970-01-01
  • 2021-05-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-01
  • 2011-07-23
相关资源
最近更新 更多