我创建了一个string (array of characters)
,我试图将其传递给我的main中的一个函数,以便在子函数中进行修改。在我的主要部分中,我声明/初始化数组:
char line[300];
我的子功能标题是
int encrypt_function(char *line[]){
}
我打算从main更改原始字符串的字母,这样当我退出我的加密函数并尝试在我的main函数中打印我的字符串时,line
字符串与我通过它时的字符串不同到encrypt_function
。
我对encrypt_function的调用是:
encrypt_function(*line);
我遇到了一个段错误 - 我做错了什么?
答案 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 [])。