【发布时间】:2020-10-17 08:38:03
【问题描述】:
我有一个核心转储,我不知道为什么。代码如下:
#include <stdio.h>
int str_size(char *str) {
int size = 0;
for (int i = 0 ; str[i] != '\0' ; i++) {
size++;
}
return (size);
}
int find_char(char c, char *str) {
int place = 0;
for (int i = 0 ; str[i] != '\0' ; i++) {
if (c == str[i]) {
place = i;
}
}
return (place);
}
char *convert_dec_to_base(int n, char *base) {
char n_based[64];
char converted_b[64];
for (int i = 0 ; n != 0 ; i++) {
n_based[i] = base[n % str_size(base)];
n /= str_size(base);
}
for (int i = 0 ; i < str_size(n_based) ; i++) {
converted_b[str_size(n_based) - i - 1] = n_based[i];
}
return (converted_b);
}
int main(void) {
printf("%s\n", convert_dec_to_base(32, "0123456789ABCDEF"));
printf("%c\n", t[1]);
return (0);
}
此代码会将十进制整数转换为给定的基数。它将返回一个包含基本转换整数的char*。
【问题讨论】:
-
在
convert_dec_to_base()中,您返回本地数组converted_b(好吧,您返回指向其第一个元素的指针),但当main()开始使用它时,该数组已不存在(该数组仅在函数激活时存在)。 -
旁注:
t未声明 -
看起来
converted_b不是以空值终止的 -
旁注: 如果
find_char失败,则返回 0。这是字符串的有效索引(例如,如果str是c,这也返回0)。如果找到not,则调整函数以返回(例如)-1。
标签: c runtime-error coredump char-pointer