c - 取消引用双指针并使用索引运算符

标签 c string pointers

我将一个 char ** 类型的双指针传递给一个函数。在该函数内部,我需要取消对指针的引用,然后通过字符数组进行索引。

不幸的是,当我尝试将大写字母重新分配给数组时,我得到了一个核心转储。

我需要有关如何执行此操作的帮助。 (这不是家庭作业,只是个人项目。)

void buffer(char **ppline);

int main()
{
  char *line="The redcoats are coming!";

  buffer(&line); 
  printf("\nline = %s\n",line);

  return(0);
}


void buffer (char **ppline)
{

 int i=0;
 char a;

  for (i=0; i < strlen(*ppline); i++)
  {
    a = toupper( (*ppline)[i] );   /* THIS LINE CAUSES THE CORE DUMP  */
    ((*ppline)[i]) = a;
  }

  return;
}

最佳答案

"" 中的字符串文字是常量。你不能在你做的时候修改它,因为那是未定义的行为。试试这个,它分配存储并将字符串文字复制到其中:

void buffer(char **ppline);

int main()
{
  char line[] = "The redcoats are coming!";

  buffer(&line); 
  printf("\nline = %s\n",line);

  return(0);
}


void buffer (char **ppline)
{

 int i=0;
 char a;

  for (i=0; i < strlen(*ppline); i++)
  {
    a = toupper( (*ppline)[i] );   /* THIS LINE CAUSES THE CORE DUMP  */
    ((*ppline)[i]) = a;
  }

  return;
}

关于c - 取消引用双指针并使用索引运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11156750/

相关文章:

c - 试图在 c 中复制字符串,第一个字母未被复制

c - 从不兼容的指针类型传递参数 1 'fprintf' 时出错。 C

c - 位域操作缺点

java - 以 1024 字节的 block 分割 Java 字符串

c - 在 C 中初始化字符串的正确方法

pointers - 满足接口(interface)的 Go 结构方法类型

c++ - 为什么值(value)观不同? C++ 指针

c - 如何从文件中逐行读取

python - 在 Django 中对字符串进行 Slugify

c - 使用 void 指针的通用复制