c - 如何从函数返回可变大小的字符串?

标签 c pointers c-strings character-arrays

我需要一个函数的工作代码,该函数将返回一个随机长度的随机字符串。

下面的代码可以更好地描述我想做的事情。

char *getRandomString()
{
    char word[random-length];
    // ...instructions that will fill word with random characters.
    return word;
}
void main()
{
    char *string = getRandomString();
    printf("Random string is: %s\n", string);
}

为此,我严格禁止使用除stdio.h 之外的任何其他包含。 编辑:这个项目将被改编为为 PIC 微 Controller 编译,因此我不能使用 malloc() 或类似的东西。 我在这里使用 stdio.h 的原因是为了能够使用 GCC 检查输出。

目前,这段代码给出了这个错误。-
“警告:函数返回局部变量的地址 [默认启用]”

然后,我认为这可行。-

char *getRandomString(char *string)
{
    char word[random-length];
    // ...instructions that will fill word with random characters.
    string = word;
    return string;
}
void main()
{
    char *string = getRandomString(string);
    printf("Random string is: %s\n", string);
}

但它只会打印出一堆无意义的字符。

最佳答案

有 3 种常见的方法可以做到这一点。

  1. 让调用者传入一个指向要存储数据的数组(的第一个元素)的指针,以及一个长度参数。如果返回的字符串大于传入的长度,则报错;你需要决定如何处理它。 (您可以截断结果,也可以返回空指针。无论哪种方式,调用者都必须能够处理它。)

  2. 返回一个指向新分配对象的指针,调用者负责调用free完成后。如果 malloc() 可能返回空指针失败(这始终是可能的,您应该始终检查它)。自 mallocfree<stdlib.h> 中声明这不符合您的(人为的)要求。

  3. 返回指向静态 数组(的第一个元素)的指针。这避免了返回指向本地分配对象的指针的错误,但它有其自身的缺点。这意味着以后的调用会破坏原始结果,并且它会施加一个固定的最大大小。

如果这些是理想的解决方案,则无。

关于c - 如何从函数返回可变大小的字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7194776/

相关文章:

c - 如何使用另一个文件中的结构?

objective-c - 我的 PBKDF2 实现不断得到错误的值

c++ - 从字符串指针获取字符串内容C++

c++ - 我需要写一个程序

c++ - CString 的动态 3 维数组中的内存泄漏

c - 为什么在写入使用字符串初始化的 "char *s"时会出现段错误,而不是 "char s[]"?

计算百分位数

c - 二进制 * 操作数无效(有 'char *' 和 'char **' )错误

c - 为什么 char 双指针的第一项会损坏

c - libmpdec mpd_qncopy 内存分配