我想在函数中修改一个字符串。我的代码非常简单:
#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;
}
最佳答案
sprintf
将 char*
作为第一个参数,而不是 char**
,所以它应该是 sprintf(*字符串,“一些字符串”);
。然而 *string
在那一点上将是 NULL
,所以这仍然行不通。
如果您希望字符串的内存由doSomething
函数分配,则需要在该函数中分配内存。 sprintf
不会为您分配任何内存。因此,在调用 sprintf
之前,您需要使用 malloc
分配内存并使 *string
指向该内存。您还应该知道,您的函数的用户在完成使用后需要释放内存。
关于C 通过引用字符串传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24333417/