我已经编写了我的getline函数程序。它需要输入,直到遇到“ \ n”,然后转移到下一个输入。另外,我在这里使用了指针数组来存储字符串输入,但是在第一个字符串输入之后程序崩溃了。有什么问题吗?
这是程序的代码。我已经尝试调试它,但是它在这里找不到问题。
#include<stdio.h>
#include<stdlib.h>
void getline2(char *s)
{
char c;
while((c=getchar())!='\n')
{
*s=c;
s++;
}
*s='\0';
}
int main()
{
char *lines[3];
int i=0;
while(i<3)
{
getline2(lines[i]);
i++;
}
for (i = 0; i < 3; i++)
{
printf("\n%s", lines[i]);
}
return 0;
}
当我按下回车键后输入第一行时,程序崩溃。
答案 0 :(得分:4)
在您的代码中,def rectangle(matrix):
R = len(matrix)
C = len(matrix[0])
mtrx = []
for i in range(R):
row = []
for j in range(C):
#creating a matrix of 0
row.append(0)
mtrx.append(row)
for i in range(C):
#copy first row matrix
mtrx[0][i] = matrix[0][i]
#counting the consecutive ones
for j in range(R):
if matrix[j][i] == 0:
mtrx[j][i] = 0
else:
mtrx[j][i] = mtrx[j-1][i]+1
#sort the rows
for i in range(R):
mtrx[i] = sorted(mtrx[i],reverse=True)
#Traverse the sorted matrix to find maximum area
max_area = 0
for i in range(R):
for j in range(C):
current = (j+1) * mtrx[i][j]
if current > max_area:
max_area = current
return max_area
matrix = [[0, 1, 0, 1, 0],
[0, 1, 0, 1, 1],
[1, 1, 0, 1, 0]]
定义了一个char *lines[3];
指针的数组。指针本身不会自动指向任何有效内存。除非正确初始化,否则尝试使用(或取消引用)它们将导致undefined behavior。
有两种常用的方法来实现您想要的(根据您的要求):
fgets()
] malloc()
and family)并根据输入长度调整大小。答案 1 :(得分:0)
char*
除了提供指向有效内存的getline2()
(其他人也建议)外,还有其他弱点需要解决。
大小未知
getline2()
不知道可以保存多少个字符。建议接受大小参数并调整代码,以防止s
溢出。
// void getline2(char *s)
void getline2(char *s, size_t sz)
EOF
上的无限循环
当stdin
关闭或发生罕见的输入错误时,getchar()
可以永久返回EOF
,并且永远不会退出循环。
257个值不适合char
int fgetc()
返回unsigned char
和EOF
范围内的值。使用int c;
并测试c != '\n' && c != EOF
的循环
// char c;
// while((c=getchar())!='\n')
int c;
while((c=getchar())!='\n' && c != EOF)