C 通过引用字符串传递

标签 c function reference char c-strings

我想在函数中修改一个字符串。我的代码非常简单:

#include <stdio.h>


void doSomething ( char **string )
{
  sprintf(string,"some string");
}  

int main ( void )
{
  char *origString = NULL;

  doSomething ( &origString );
  printf ( "%s\n", origString );

  return 0;
}

但是这段代码不起作用。我真的很感激解释而不是解决方案,但也欢迎解决方案。

我真的需要使用 sprintf 函数,因为我的想法是用 %s 添加一些其他字符串。

谢谢!

解决了!

 #include <stdio.h>


void doSomething ( char **string )
{
   *string = malloc(strlen("some string") + 1); 
    sprintf(*string,"some string");
}  

int main ( void )
{
  char *origString = NULL;

  doSomething ( &origString );
  printf ( "%s\n", origString );
   free(origString); // Previously malloced in doSomething
  return 0;
}

最佳答案

sprintfchar* 作为第一个参数,而不是 char**,所以它应该是 sprintf(*字符串,“一些字符串”);。然而 *string 在那一点上将是 NULL,所以这仍然行不通。

如果您希望字符串的内存由doSomething 函数分配,则需要在该函数中分配内存。 sprintf 不会为您分配任何内存。因此,在调用 sprintf 之前,您需要使用 malloc 分配内存并使 *string 指向该内存。您还应该知道,您的函数的用户在完成使用后需要释放内存。

关于C 通过引用字符串传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24333417/

相关文章:

c++ - 为什么在引用(常量指针)可用时使用 const 关键字声明常量指针?

c - 如何处理缓冲串行数据

XML 是否引用带有 # 的 id?

c - 共享内存中带有 strcpy 的 BAD_ACCESS (C)

当我在函数内打印第一个值后尝试 printf 时出现 C 段错误

c++ - Arduino C++ : Does the F() macro make any sense inside a function?

Javascript未定义函数..但它确实已定义

Javascript的赋值操作是复制引用?

代码工作了一段时间然后就停止了

c - 如何在多个 Printf() 中中断 Printf()