有问题分配字符串指针字符串值
Having problems assigning character string pointer string value
我有问题分配ptr->str
令牌值。不确定ptr->str
是指向char的指针,所以是token。printf
不打印字符值。我得到一个运行时错误。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include "C2A6E4_List-Driver.h"
typedef struct List
{
struct List *next; /* pointer to the next list node */
char *str; /* pointer to the string represented */
int count; /* # of occurrences of this string */
} List;
#endif
#define LINESIZE 256
#define DELIMETERS " "
typedef enum { false, true }bool;
List *newNode(void);
bool searchNode(List *head, char *key);
List *CreateList(FILE *fp)
{
List *head, *ptr;
int cnt = 0;
size_t length;
bool firstNode = true;
bool srchResult = false;
char buf[LINESIZE];
while (fgets(buf, (int)sizeof(buf), fp) != NULL) { /* read line of file*/
char *token = strtok(buf, DELIMETERS);
while (token != NULL) {
if (firstNode) {
ptr = newNode();
length = strlen(token) + 1;
// ptr->str = (char *)malloc(sizeof(char) * length);
ptr->next = head;
ptr->str = token;
ptr->count = 1;
head = ptr;
firstNode = false;
}
else {
srchResult = searchNode(head, token);
printf("srchResult= %dn", srchResult);
if (srchResult) {
ptr = newNode();
length = strlen(token) + 1;
ptr->next = head;
ptr->str = token;
printf("ptr_str = %s", ptr->str);
ptr->count += 1;
head = ptr;
}//end if
}
printf("token = %sn", token);
token = strtok(NULL, DELIMETERS);
}//end while
}// end while fgets
return head;
}
List *newNode(void)
{
List *ptr = (List *)malloc(sizeof(List));
if (ptr == NULL) {
fputs("Out of Memoryn ", stderr);
exit(EXIT_FAILURE);
}
return ptr;
}
bool searchNode(List *head, char *key)
{
List *cur = head;
bool cmpResult = false;
printf("key = %sn", key);
while (cur) {
printf("call strmcmpn");
printf("cur->str = n", cur->str);
cmpResult = strcmp(cur->str, key);
printf("cmpResult = %dn", cmpResult);
if (cmpResult == 0) {
return false;
cur->count += 1;
}
cur = cur->next;
printf("curnextn");
}
if (cmpResult > 0 || cmpResult < 0)
cmpResult = true;
printf("returnn");
return cmpResult;
}
List *PrintList(const List *head)
{
List *cur = head;
while (cur) {
printf(" %s %d ean", cur->str, cur->count);
cur = cur->next;
}
return (List *)head;
}
void FreeList(List *head)
{
List *cur = head, *tmp;
while (cur) {
tmp = head;
head = head->next;
free(tmp);
}
}
变量'head'没有在createNode中初始化,因此,当您稍后在searchNode或PrintList中遍历树时,在'ptr->next'中替换head可能会导致意外行为。
相关文章:
- strcpy 在类中无法使用字符串指针
- 如何将字符串指针数组转换为字符串类型的智能指针向量?
- 使用conststd::字符串指针作为函数参数
- 将字符串指针传递到C++和Xcode 11.1中不同线程上运行的函数
- OOP 和字符串指针的奇怪行为
- 在 C++ 中通过字符串指针复制字符串变量中的字符串
- 删除字符串指针在struct中的内存
- 字符串指针的排序向量
- C#C /CLR处理REF参数和字符串指针
- 问题在字符串指针中存储单词
- 如何在C++中从字符串指针中获取字符
- 如何使用字符串指针访问映射的键
- 将字符串指针与 NULL 以及 NULL 字符进行比较的目的
- 如何获取字符串指针的值?
- C++ 字符串* 指针未在控制台中正确打印
- Visual Studio C++ 空字符串指针
- 管理C#中返回的字符串指针
- 指向C++中的字符串指针数组的指针
- 如何将结果集设置为字符串指针
- 如何初始化字符串指针