如何解决如何为char矩阵2D数组创建输入函数?
我是C语言的新手,我写了以下代码,但不幸的是,它不起作用。错误是在写此行时C6011取消引用空指针和C6386缓冲区溢出:
arr[i] = (char*)malloc(m * sizeof(char));
和C6385从arr和C6011读取此行的无效数据:
scanf_s("%c ",&arr[i][j],1);
此外,当我输入1000个具有1000个字符的行时,编译器将崩溃。我应该如何改善呢?
这是代码:
void individualTestCaseInput(char** arr,int n,int m) {
arr = (char**)malloc(n * sizeof(char*));
for (int i = 0; i < n; i++)
{
arr[i] = (char*)malloc(m * sizeof(char));
}
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++) {
scanf_s("%c ",1);
}
}
}
解决方法
函数参数char **arr
是函数的局部变量,该变量由参数表达式的值初始化。那就是参数通过值传递给函数。局部变量的更改不会影响原始参数。
可以通过以下方式声明和定义函数(即通过指向它的指针通过引用来接受原始指针)
void individualTestCaseInput( char ***arr,int n,int m )
{
*arr = malloc(n * sizeof(char *));
for (int i = 0; i < n; i++)
{
( *arr )[i] = malloc(m * sizeof(char));
}
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++) {
scanf_s(" %c",&( *arr )[i][j],1);
}
}
}
像这样称呼
char **arr;
//...
individualTestCaseInput( &arr,n,m );
或通过以下方式声明和定义函数
char ** individualTestCaseInput( int n,int m )
{
char **arr = malloc(n * sizeof(char *));
for (int i = 0; i < n; i++)
{
arr[i] = malloc(m * sizeof(char));
}
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++) {
scanf_s(" %c",&arr[i][j],1);
}
}
return arr;
}
并称呼它
char **arr = individualTestCaseInput( n,m );
您还可以将检查是否成功分配到内存中。
,困惑时要遵循第一条原则!您需要在函数参数中添加额外的*
。
- 您有
char
的数组元素。 - 然后,您要排成一行(或以任何顺序排成一列)。这是
char *
,尽管在写时可以写得更干净一些。char row[]
。 - 您有一些这样的行,
char **
又名char matrix[][]
。 - 然后,您想将指针传递给该函数,因此
char ***
也称为char *matrix_ptr[][]
。 - 此时,您的功能需要设置
*matrix_ptr = malloc(...)
。我建议将其退回。
如果 do 最后仍然使用matrix_ptr
,则在通过指针引用数组元素(例如*
)时需要使用(*matrix_ptr)[][]
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。