【问题标题】:passing a char array by reference in C在C中通过引用传递一个char数组
【发布时间】: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);

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

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

提前致谢 =)

【问题讨论】:

    标签: c arrays reference char


    【解决方案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
    猜你喜欢
    • 2018-09-01
    • 1970-01-01
    • 2013-11-07
    • 2010-11-09
    • 1970-01-01
    • 1970-01-01
    • 2014-05-22
    • 1970-01-01
    相关资源
    最近更新 更多