c - 不能在程序中提供更大的输入
问题描述
我正在尝试解决有关 codechef 的问题。就逻辑而言,此代码运行良好,但我无法提供大量输入。例如,如果我输入 13 位或更多位,则它不会在 vscode 中运行,如果输入为 22 位或更多位,则它不会在 devc++ 中运行。
#include <stdio.h>
#include <math.h>
#include<string.h>
int main() {
int t, l, i, flag = 0;
char ch = ' ';
scanf("%d", &t);
char d[t][100000];
int out[t];
for(i = 0; i < t; i++) {
scanf("%s", &d[t]);
size_t len = strlen(d[t]);
printf("\n%d", len);
char ch = d[t][0];
for (size_t j = 0; j < len; j++) {
if ((ch != d[t][j])) {
flag++;
}
}
if (flag >= 2 && flag != (len-1))
out[i]=0;
else
out[i]=1;
flag = 0;
}
for(i = 0; i < t; i++) {
if (out[i] == 1)
printf("Yes\n");
else
printf("No\n");
}
return 0;
}
试运行1:-
1
11110111111
11
Yes
试运行 2:-
1
111101111111
0
为什么它不能处理更大的输入?
解决方案
当您从 开始编写时d[t]
,您超出了数组的范围,这意味着您可能正在覆盖程序的其他部分。您应该改为写入d[i]
.
此外,这个数组现在在堆栈上,但堆栈只有一个非常有限的大小,所以你可能会超过这个大小,这被称为堆栈溢出。在 Windows 上,堆栈大小我认为是 1MB,所以如果t
大于 10,你就已经超过了。所以你应该在堆上分配。
这应该可以,但我没有测试它:
int t = 0;
scanf("%d", &t);
char **d = (char **)malloc(t * sizeof(char *));
for (int i = 0; i < t; i++){
d[i] = (char *)malloc(STR_SIZE * sizeof(char));
scanf("%s", d[i]);
}
推荐阅读
- r - R Keras 错误:py_call_impl 中的错误(可调用,dots$args,dots$keywords):ValueError:未提供数据
- django - 在 Ajax 中显示 ValidationError
- javascript - 如何更改 Axios 响应中的变量值?
- r - 将操作数据Stata转换为R:if和递归值在同一行
- pandas - 如果满足多个条件,则保留数据框行
- javascript - 从 div 元素中删除单词
- java - 如何从命令行在 jar 文件中运行测试类?
- java - 从带有 NP 的 Python 移植到 Java - 传递给 np.sum 时,不能将序列乘以“列表”的非整数类型
- winapi - UI 自动化 ScrollPattern 是否有边界矩形或者是否有可靠的方法来获取它?
- git - 如何在分支之间切换时链接到 git repo 的内容