【问题标题】:modifying a char pointer?修改一个字符指针?
【发布时间】:2016-10-18 23:33:15
【问题描述】:

所以我正在尝试构建一个接受 *char 并反转它的函数。该函数有两个参数(N是字符串的长度)

void reverse_str(char *str, int N){
    char temp;
    temp = str[i];
    str[i] = str[N-i];
    str[N-i] = temp;
    if (i == N)
    {
        return;
    }
    i++;
    reverse_str(*str, N);
}

但是由于某种原因,当编译器到达代码的第三行时; str[i] = str[N-i]; 它返回空指针'\0'

是否可以在不复制的情况下修改 str ?我做了任何错误的声明吗?

顺便说一句,i 是一个全局值,等于 0,并且每次递归调用函数时都会增加。

【问题讨论】:

  • "N 是字符串的长度"。这意味着str[N-0] 始终是 NUL。因为根据定义,C 字符串将 NUL 字符作为最后一个字符,该字符位于 strlen 索引处。
  • while (N > 1) { swap(&str[0], &str[N-1]); N -= 2; str++; } 可能会这样做。

标签: c string pointers char


【解决方案1】:

做 N = N -1 在调用函数作为第一步之前。这样就可以解决问题了。

如果 N 是长度,任何 char_array[N] 都将是 '\0',因为它是结束字符。 (基本上是字符串终止符)。您想对 \0 之前的所有内容进行操作,但不包括它。

【讨论】:

  • 考虑char x[] = ""; int N = strlen(x); N = N-1; reverse_str(x, N); 最好让reverse_str() 根据需要处理-1
  • 我实际上改变了它,它在 i == 0 时有效,但当它增加时,它在第三行给我 EXC_BAD_ACCESS。有什么想法吗?
  • 你是用字符串文字来调用它吗?字符串字面量表示一个不可修改的数组(更准确地说,尝试修改它具有未定义的行为)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-26
  • 1970-01-01
  • 2013-10-28
  • 1970-01-01
  • 2021-12-19
相关资源
最近更新 更多