[英]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.