2012-05-06 42 views
2

您好我真的不能让我解决这个头。我基本上试图通过传递输出数组作为参数来从函数返回一个char数组。以下是我迄今为止:通过引用传递一个字符数组用C

功能:

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); 

我曾尝试切换和交换*和&,看看会有什么工作,有在指针和阅读的东西还没我觉得应该发生什么了什么是真正确实发生是两个非常不同的东西,现在我想我已经糊涂比当我开始自己更多!笑

可有人请帮助我,并解释这样做是正确的做法?

在此先感谢=)

回答

11

这条线:

*name = "testing"; 

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

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); 
+0

是奏效谢谢! :) 那么strcpy是做什么的=不? 我想我还是有1/2我的头左右浮动Java和C#因为这是我在过去所做的那样!笑 – geekman92

+1

'strcpy'副本交流从一个缓冲到另一个,但一个更安全的功能的字符串是'strncpy',到这里看看:HTTP://www.cplusplus.com/reference/clibrary/cstring/strncpy/ – MByD

+0

谢谢你帮助我理解! :)非常好,完整的答案! – geekman92