所以,我实现的直方图,基本上把一个字符串作为输入,把它分成单词,然后把单词的长度作为索引,输出是一个整数数组。a[p]++,如果strlen(s)==p基本上。我的代码要么打印一个零,要么根本不工作。为什么?代码是:
#include <stdio.h>
#define BUFFER_SIZE 1024
#define array_size(_S) 5000 //didn't want to edit code, this used to be a formula.
//an input function I coded when I was a beginner.
void input_str(char * str, int delimeter, int bound)
{
int inpchar;
register int incvar = 0;
while (incvar < bound)
{
inpchar = getchar();
if(inpchar == '\n' || inpchar == delimeter)
{
*(str+incvar) = '\0';
return;
}
*(str+(incvar++))=inpchar;
}
*(str+incvar) ='\0';
}
//old code I used
int lenstr(char * str)
{
register int varinc = 0;
while( *(str + varinc) != '\0')
{
varinc++;
}
return varinc;
}
void xprintf(const char *s)
{
int counter = 0;
while ( *(s + counter) != '\0')
{
putchar(*(s + counter));
counter++;
}
}
void initialize(int **a, unsigned int len)
{
int counter = 0;
while(counter < len)
{
*(a + counter) = 0;
counter++;
}
}
int main(void)
{
char inp_str[BUFFER_SIZE + 1];
printf("Enter full string.\n");
input_str(inp_str,-1,BUFFER_SIZE);
int ncounter = 0;
int ecounter = 0;
int frequency_array[ array_size(inp_str)];
intialize (frequency_array, array_size(inp_str));
int real_length = lenstr(inp_str);
while (ncounter <= real_length)
{
while(*(inp_str + (ncounter + ecounter)) != ' ' && *(inp_str +(ncounter + ecounter)) !='\0')
{
ecounter++;
}
frequency_array[ecounter]++;
ncounter = ncounter + ecounter + 2;
ecounter = 0;
}
ncounter = 0;
while (ncounter < array_size(inp_str))
{
putchar(*(frequency_array + ncounter) + '0');
ncounter++;
}
return 0;
}
现在,它只是segfaults。
1条答案
按热度按时间svmlkihl1#
intialize (frequency_array, array_size(inp_str));
您拼错了initialize,因此它给出了一个错误,请写入
initialize(frequency_array, array_size(inp_str));
来修复该错误。void initialize(int **a, unsigned int len)
两个星号('*')意味着它是指向指针的指针,但是从它的使用和实现来看,您希望它与常规数组/指针一起工作。因此,只需将它更改为
void initialize(int *a, unsigned int len)
同样,当这段代码编译无误时,就像我在修复了我提到的问题后所做的那样,它打印出了一个大得离谱的字符串。这是因为
array_size(inp_str)
宏总是等于5000,而不是数组的大小。该数组的实现如下:#define array_size(s) (sizeof(s) / sizeof(s[0]))
这将除以数组的总大小(以字节为单位),再除以单个元素的大小,从而得出大小。
这应该可以修复segfault并帮助处理其他错误。希望这能有所帮助!