在c中通过引用传递数组

时间:2015-01-28 04:56:31

标签: c arrays pointers segmentation-fault

我创建了一个string (array of characters),我试图将其传递给我的main中的一个函数,以便在子函数中进行修改。在我的主要部分中,我声明/初始化数组:

char line[300];

我的子功能标题是

 int encrypt_function(char *line[]){
    }

我打算从main更改原始字符串的字母,这样当我退出我的加密函数并尝试在我的main函数中打印我的字符串时,line字符串与我通过它时的字符串不同到encrypt_function

我对encrypt_function的调用是:

encrypt_function(*line);

我遇到了一个段错误 - 我做错了什么?

4 个答案:

答案 0 :(得分:2)

分段错误是由于内存访问冲突造成的。 您的功能应采用

格式
int encrypt_function(char *line);

你必须调用类似

的功能
encrypt_function(&line[0]); 

encrypt_function(line);

答案 1 :(得分:0)

您的int encrypt_function(char *line[]){ }等于int encrypt_function(char **line){ }。只需使用int encrypt_function(char *line){ }int encrypt_function(char line[]){ }来解决您的问题。

内存保护引发了分段错误。

答案 2 :(得分:0)

调用encrypt_function时,需要传递& line而不是* line。

BUT:

如果您只想更改缓冲区的contnet,则不需要额外的指针。

int encrypt_function(char *line);

优选。要安全地操纵它,你也应该传递大小:

int encrypt_function(char *line, int size);

答案 3 :(得分:0)

当您尝试使用按引用传递的函数时,我们需要使用指针作为参考。在行[300]中,变量行是指向300个元素的数组的指针。因此,您可以直接将行传递给函数而不是*行。 encrypt_function(线)。这是因为行本身就是一个指针。

在声明中声明函数为encrypt_function(char * line)或encrypt_function(char line [])。

相关问题