在C中通过引用传递一个char数组

Posted

技术标签:

【中文标题】在C中通过引用传递一个char数组【英文标题】:passing a char array by reference in C 【发布时间】:2012-05-06 06:12:09 【问题描述】:

嗨,我真的无法理解这一点。我基本上试图通过将输出数组作为参数传递来从函数返回一个字符数组。这是我目前所拥有的:

功能:

int GetComputerName(char *name, char *ip_address)
    *name = "testing";
    return 0;

并称它为:

char comp_name[50];
GetComputerName(&comp_name, serverIP);
printf("\n\n name: %s\n\n", comp_name);

我已经尝试切换和交换 * 和 & 以查看什么会起作用并阅读了指针和其他内容,但我认为应该发生的事情和实际发生的事情是两件非常不同的事情,现在我想我很困惑我自己比我开始时更!哈哈

谁能帮我解释一下正确的做法是什么?!

提前致谢 =)

【问题讨论】:

【参考方案1】:

这一行:

*name = "testing"; 

无效,因为您将指向“测试”的指针分配到名称指向的 char 中。您需要将数据复制到缓冲区中。应该是:

int GetComputerName(char *name, char *ip_address)
    strcpy(name,"testing");
    return 0;

甚至更好(避免溢出):

int GetComputerName(char *name, size_t buff_len, char *ip_address)
    strncpy(name,"testing", buff_len);
    name[buff_len - 1] = '\0';
    return 0;

并称它为:

GetComputerName(comp_name, sizeof(comp_name), serverIP);

【讨论】:

是的,谢谢! :) 那么 strcpy 做了什么而 = 没有呢?我想我仍然有 1/2 的头脑在 Java 和 C# 周围徘徊,因为这就是我过去所做的!大声笑 strcpy 将一个 c 字符串从一个缓冲区复制到另一个缓冲区,但更安全的函数是 strncpy,请看这里:cplusplus.com/reference/clibrary/cstring/strncpy 感谢您帮助我理解! :) 非常好的和完整的答案! @MByd strncpynot a safer version of strcpy

以上是关于在C中通过引用传递一个char数组的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Turbo C/C++ 中通过引用传递字符串

在 C++ 中通过引用传递 char 的效率

在 C++ 中通过引用传递对象

在 C 中通过引用传递时会发生啥?

在python中通过引用传递引用

如何在 Ruby 中通过引用传递?