简体   繁体   English

动态扫描字符串:C

[英]Dynamic scan for a string : C

Consider below code I have written: 考虑下面我写的代码:

#include <stdio.h>
#include <stdlib.h>
#include <assert.h>

void dynamicScan(char** str)
{
 *str=(char*) malloc(10*sizeof(char));
 int i=0,j=1,k=0,c;
 do{
 c=getchar();
 *(*str+i)=c;
 i++;
 k++;
 if(k >=10)
 {
     j++;
     *str=(char*) realloc(*str,j*sizeof(char)); //Edited: Line 17 here
     assert(*str);
     printf("Resized to %d bytes\n",j*10);
     k=0;
 }
 }while(c != '\n');

 *(*str+i)='\0';
}


int main()
{

char* dynamicName,*dynAdd;

printf("-------------------------\n");
printf("Enter a Dynamic Name: ");
dynamicScan(&dynamicName);
printf("Dynamic Name: %s\n",dynamicName);
printf("Enter a Dynamic Address: ");
dynamicScan(&dynAdd);
printf("Dynamic Address: %s\n",dynAdd);


free(dynamicName);
free(dynAdd);


return 0;
}

I am trying to implement dynamic scannig of a character array. 我正在尝试实现字符数组的动态scannig。 It works fine. 工作正常。 I have seen the code running to large arrays .eg say resized to 80 bytes . 我已经看到代码运行到大型数组,例如说调整为80 bytes But many times code is crashing even for resizing to 20 bytes . 但是很多时候,即使将大小调整为20 bytes代码也会崩溃。 Below is the dgb output. 以下是dgb输出。 I am not able to figure out, what is going wrong, Can any help to debug? 我不知道怎么了,出什么问题了,可以帮忙调试吗?

(gdb) run
    The program being debugged has been started already.
    Start it from the beginning? (y or n) y
    Starting program: /cygdrive/d/cPractice/getS.exe
    [New Thread 8820.0x102c]
    [New Thread 8820.0x3d0]
    -------------------------
    Enter a Dynamic Name: Andrew Thomas from UK
    Resized to 20 bytes
    Resized to 30 bytes
    Dynamic Name: Andrew Thomas from UK

    Enter a Dynamic Address: I was living in scotland; now in united kingdom
    Resized to 20 bytes
    Resized to 30 bytes

    Program received signal SIGABRT, Aborted.
    0x00401206 in dynamicScan (str=0xd0) at getS.c:17
    17               *str=(char*) realloc(*str,j*sizeof(char));
    (gdb)

It appears that you should change this line: 看来您应该更改此行:

*str=(char*) realloc(*str,j*sizeof(char));

to this: 对此:

*str=(char*) realloc(*str,j*10*sizeof(char));

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM