c - 记忆可能是问题吗?
问题描述
我正在解决一个问题,这是我的代码,它在我的本地工作空间中完美运行,输入如下,并给出了预期的输出,但在黑客等级中,它是编译的超时时间。
问题陈述在给定的字符串中:
出现两次。并且每次发生一次。
其余的数字根本不出现。
样本输入 1:lw4n88j12n1
样本输出 1:0 2 1 0 1 0 0 0 2 0
面临以下输入的问题
输入:
9139f793308o0lo66h6vc13lgc697h0f6c32lu84445972k0o0l033od17c083yn5051d6j319hyo8j939n28d913015ns6zx5653x01211x12ch2526o65sg7xw6302141q9203s22l336319ll9yx4b597mr318a7943906750j4u152067nq83ne9f24thu96yd05173l47c803roxci45615f0w53i1sz913jj6za733l73tw6r66mq6p44sfhjr26h8e801z8zlcx2l1e65r2879xj3w3acv216196uq158o663y7oz2i5378v0v5w17762451t424352m23026r9o202i9785382o159e4gu1c8561157z5f1vqs5755465b8u728u956434mv944885li456628a994u7j5278m269n1pk8e46940q834h06il6h447888tr7ig72z10fe09k5g98h9bgt6z40v42s16pt6k3l3v45i83i01b9448g554741w766f2q7v31i085488h060e710p53076c6nm98pi946g8j2n6j8x29qa1ad48172y0u4818121p686bud89741201p54087u56g8scerv9pvhuo09re477zfb224i2c1325bj58jx4bk7b009f6446j5i95474p266i503r670n631x6940gwl71ejbx47imx576129248901765rnpu6l80084t0j1839f5y3409w2n403fu6ogw1170jmb6o5l520vg0703e0
预期输出:53 54 47 48 54 52 63 46 49 46
我在这里先向您的帮助表示感谢。
int main() {
int i;
int value;
char x;
int arr[10] = {0};
char * ptr =(char *)malloc(sizeof(char *));
/* Enter your code here. Read input from STDIN. Print output to STDOUT */
scanf("%s",ptr);
while(*ptr != '\0')
{
if(*ptr >= 65 && *ptr <=90 || *ptr >=97 && *ptr <=122){
*ptr++;
}
else{
x = *ptr;
value = atoi(&x);
switch (value)
{
case 0:
arr[0]++;
*ptr++;
break;
case 1:
arr[1]++;
*ptr++;
break;
case 2:
arr[2]++;
*ptr++;
break;
case 3:
arr[3]++;
*ptr++;
break;
case 4:
arr[4]++;
*ptr++;
break;
case 5:
arr[5]++;
*ptr++;
break;
case 6:
arr[6]++;
*ptr++;
break;
case 7:
arr[7]++;
*ptr++;
break;
case 8:
arr[8]++;
*ptr++;
break;
case 9:
arr[9]++;
*ptr++;
break;
}
}
}
for(i=0;i<=9;i++)
{
printf("%d ",arr[i]);
}
return 0;
}
解决方案
这是错误:char * ptr =(char *)malloc(sizeof(char *));
sizeof(char *)
等于 4 或 8。您分配的内存例如 8 个字符。当您写入整个 STDIN 时,ptr
您将覆盖堆上的内存。
当您从标准输入读取时,您必须指定最大长度示例:
char str[256] = {'\0'}
scanf ("%255s",str); //Read max 255 chars
关于你的循环体,这更好:)
uint8_t digit;
if (*ptr >= '0' && *ptr <= '9')
{
digit = (uint8_t)(*ptr - '0');
if (digit < 10)
{
arr[digit]++;
}
}
ptr++; //THERE IS NO STAR *
但是你应该使用 simple for 并知道长度和
if (ptr[i] == '\0') break;
希望它有帮助。
编辑:
sizeof(char*)
正如@dbush 建议的那样,是 4 或 8。
推荐阅读
- mongodb - mongodb 聚合> $group max 文档中的主数组
- javascript - 在页面加载时关注 Div 文本框(移动浏览器)
- python - 如何在 python 的 market_profile 包中按日期分组?
- jupyter-notebook - 在基于 rst 的文档中嵌入执行的 Jupyter 笔记本
- angular - 在每次放置角度拖放后添加箭头图标
- flutter - Flutter 未来显示数组或流生成器
- dapr - 开放应用程序模型 (OAM) 与分布式应用程序运行时 (Dapr)
- mongodb - 在 mongoose 中使用位置运算符 ($) 进行更新
- node.js - 从节点js中的远程流读取时写入远程流
- c# - 从需要 VPN 的 azure 访问站点