【发布时间】:2015-12-14 18:20:13
【问题描述】:
我正在尝试编写一个接受字符串的程序(这些是给定的),然后根据它们的长度将它们存储在另一个数组中。在此之后,程序会打印出具有该长度的单词的数量。我尝试使用以下代码创建它:
#include <stdlib.h>
#include <stdio.h>
void *repeatStr(char *str, int count);
int main() {
char arr[8][128] = { "Hallo", "Stewardess", "wat", "een", "fijne", "vlucht" };
int groottes[11] = { 0,0,0,0,0,0,0,0,0,0,0};
for (size_t i = 0; i <= strlen(arr); i++) {
char *word = arr[i] ;
int grootte = strlen(word);
groottes[grootte] += 1;
}
for (size_t i = 0; i < strlen(arr); i++) {
char ret;
int grt = groottes[i];
ret = repeatStr('*', grt);
printf("%d: %s", i + 1, ret);
}
}
void *repeatStr(char *str, int count) {
if (count == 0) return "";
char *ret = malloc(strlen(str) * count + count);
if (ret == NULL) return NULL;
strcpy(ret, str);
while (--count > 0) {
strcat(ret, str);
}
return ret;
}
我得到的错误是:
在 Oefening.exe 中的 0x0FD53B8D (ucrtbased.dll) 处引发异常:0xC0000005:访问冲突读取位置 0x00000061。
【问题讨论】:
-
会发生什么?是否抛出异常?什么是堆栈跟踪?
-
for (size_t i = 0; i <= strlen(arr); i++)我想你想要sizeof(arr)这里 -
@Alexguitar - 我认为他实际上需要 (sizeof(arr)/sizeof(arr[0]) - 否则他将迭代 8*128 个条目:)
-
这可以编译吗?
repeatStr期望char *但您将其传递给char。
标签: c out-of-memory