gpt4 book ai didi

内存可能是问题吗?

转载 作者:行者123 更新时间:2023-11-30 14:39:22 24 4
gpt4 key购买 nike

我正在解决一个问题,这是我的代码,它在我的本地工作空间上运行完美,输入如下,并给出了预期的输出,但在黑客级别中,编译超时了。

问题描述是在给定的字符串中:

出现两次。 并且每次出现一次。

剩下的数字 和 根本不会出现。

示例输入 1:lw4n88j12n1

示例输出 1:0 2 1 0 1 0 0 0 2 0

面临以下输入问题

输入:

9139f793308o0lo66h6vc13lgc697h0f6c32lu84445972k0o0l033od17c083yn5051d6j319hyo8j939n28d913015ns6zx5653x01211x12ch2526o65sg7xw6 302141q9203s22l336319ll9yx4b597mr318a7943906750j4u152067nq83ne9f24thu96yd05173l47c803roxci45615f0w53i1sz913jj6za733l73tw6r66mq6p44 sfhjr26h8e801z8zlcx2l1e65r2879xj3w3acv216196uq158o663y7oz​​2i5378v0v5w17762451t424352m23026r9o202i9785382o159e4gu1c8561157z5f1vqs 5755465b8u728u956434mv944885li456628a994u7j5278m269n1pk8e46940q834h06il6h447888tr7ig72z10fe09k5g98h9bgt6z40v42s16pt6k3l3v45i83i01b 9448g554741w766f2q7v31i085488h060e710p53076c6nm98pi946g8j2n6j8x29qa1ad48172y0u4818121p686bud89741201p54087u56g8scerv9pvhuo09re477zfb 224i2c1325bj58jx4bk7b009f6446j5i95474p266i503r670n631x6940gwl71ejbx47imx576129248901765rnpu6l80084t0j1839f5y3409w2n403fu6ogw1170 jmb6o5l520vg0703e0

预期输出: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 *

但是你应该使用简单的 for 并知道长度

if (ptr[i] == '\0') break;

希望对你有帮助。

编辑:

sizeof(char*) 按照 @dbush 的建议为 4 或 8。

关于内存可能是问题吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56112205/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com