已编辑的问题: 嗨,大家好,我的目标是打印文件中出现的前10个单词,从读取文件到计数单词出现并进行打印,我已经设法使所有工作正常进行,但是当我实现qsort时,出现了段错误。我看了看指针,它们对我来说还不错,希望得到您的反馈。
df = pd.DataFrame(index=my_datetime_index, columns=['val1', 'val2', 'val3'])
for r in rs:
try:
df.loc[r[0]] = r[1:]
except KeyError:
pass
答案 0 :(得分:1)
第一个temp
已经是一个指针,因此不要在'&'
中包含fscanf
。其次,不要忽略缓冲区大小(例如#define MAX 1024
)。第三,使用 field-width 修饰符保护数组边界,并且不要在 format-string 中添加尾随空格。
将其全部放入(假设您使用1024 as MAX
,则可以使用
fscanf(fpt, "1023%s", temp))
在阅读过程中检查了fscanf
的返回情况已经做好了。
答案 1 :(得分:1)
添加已经提到的内容。
在createWordCounter(...)
pCounter = (struct words*)malloc(sizeof(char));
您正在为char
分配内存。即使指向结构的指针是指向其第一个成员的指针,words
的第一个元素也是指向char的指针。最好小心点写
struct words *pCounter = malloc(sizeof *pCounter);
此外,请注意运算符的优先级。
在addWord(...)
中,您拥有
++pCounter->index;
该操作是在访问pCounter
之前递增指针index
。如果您尝试增加index
,应该是
++(pCounter->index);
或
pCounter->index++;
我建议将程序精简为基本内容,并一次系统地测试每个部分,以缩小错误原因的范围。
答案 2 :(得分:0)
我认为主要问题是尝试使用fscanf时temp数组的大小。
while((fscanf(fpt, "%s ", temp)) == 1)
当一行的长度大于MAX时,会出现分段错误。
您可以像这样更改代码
#define SCANF_LEN2(x) #x
#define SCANF_LEN(x) SCANF_LEN2(x)
//...
//your original code
//...
while((fscanf(fpt, "%"SCANF_LEN(MAX)"s ", temp)) == 1)
顺便说一句,您应该检查
(1)编译有关类型的警告
char* removePunc(struct words* ch)
应该是char* removePunc(char *ch)
if(temp == ' ')
应该是if(temp[0] == ' ')
if(temp == '\n')
应该是if(temp[0] == '\n')
(2)malloc大小
pCounter = (struct words*)malloc(sizeof(char));
应该是pCounter = (struct words*)malloc(sizeof(struct words));
(3)使用malloc后请记住