在C语言中如何通过引用传递字符数组

4

你好,我实在弄不懂这个问题。基本上,我想通过将输出数组作为参数传递来从一个函数返回字符数组。以下是我目前的代码:

该函数:

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个回答

14

这一行:

*name = "testing"; 

你的代码是无效的,因为你把指针“testing”赋值给了一个由name指向的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 和 = 有什么不同呢? 我想我还有一半的头脑浮动在 Java 和 C# 上,因为这是我过去做过的!!哈哈 - Ollie
1
strcpy 函数将一个 C 字符串从一个缓冲区复制到另一个缓冲区,但更安全的函数是 strncpy,请在此处查看:http://www.cplusplus.com/reference/clibrary/cstring/strncpy/ - MByD
谢谢你帮我理解! :) 回答非常好而且完整! - Ollie
@MByd strncpy不是strcpy的更安全版本。 - user694733

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接