[英]Using Strings and Malloc/Realloc
I'll be honest, I'm a complete novice at c. 老实说,我是c的新手。 Thus, things like malloc and realloc are alien concepts.
因此,诸如malloc和realloc之类的东西是陌生的概念。 I think I have the basics down, but I just can't quite get there 100%.
我认为我的基础知识已经下降,但是我不能完全达到100%。
while (int args = scanf("%s", string)) {
if (args < 0) break;
count++;
if (array == NULL) {
array = (char *) malloc(strlen(string));
if (array == NULL) {
printf("Error allocating memory");
exit(1);
}
} else {
printf("%s %d\n", string, strlen(string));
array = (char *) realloc(array, (sizeof(array) + strlen(string) + 1));
if (array == NULL) {
printf("Error allocating memory");
free(array);
exit(1);
}
printf("%lu\n", sizeof(array));
}
strcpy(&array[count - 1], string);
}
It's reading from terminal - cat file | 从终端读取-cat文件| ./program and is just a bunch of words of arbitrary length.
./program,只是一堆任意长度的单词。 I'm trying to get them all into an array (array).
我正在尝试将它们全部放入一个数组(数组)。
Edit: I should mentino that I'm apparently trying to access memory I didn't allocated: malloc: *** error for object 0x7fe9e04039a0: incorrect checksum for freed object - object was probably modified after being freed. *** set a breakpoint in malloc_error_break to debug Segmentation fault: 11
编辑:我应该mentino我显然试图访问未分配的内存:
malloc: *** error for object 0x7fe9e04039a0: incorrect checksum for freed object - object was probably modified after being freed. *** set a breakpoint in malloc_error_break to debug Segmentation fault: 11
malloc: *** error for object 0x7fe9e04039a0: incorrect checksum for freed object - object was probably modified after being freed. *** set a breakpoint in malloc_error_break to debug Segmentation fault: 11
Looks like you don't understand what pointers, strings and char*s are in C. For example, here is some description. 似乎您不了解C中的指针,字符串和char * s。例如, 这是一些描述。
Here are main problems: 主要问题如下:
To simplify the process, I ended up going with a char ** array
instead of a char * array
. 为了简化过程,我最终使用了
char ** array
而不是char * array
。 For each iteration of my while loop (which, by the way, is now while (scanf("%s", string) > 0)
to comply with gcc standards (I had originally compiled with g++)), I realloc
using count
x sizeof(char *)
and then I can array[count - 1] = (char *) malloc(sizeof(string + 1)
finally, strcpy(array[count - 1], string)
对于我的while循环的每次迭代(顺便说一句,现在是
while (scanf("%s", string) > 0)
以符合gcc标准(我最初用g ++编译)),我使用count
x重新realloc
sizeof(char *)
,然后我可以array[count - 1] = (char *) malloc(sizeof(string + 1)
最后, strcpy(array[count - 1], string)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.