c - 将 malloc 与函数和 strcmp 一起使用

标签 c malloc strcmp

我正在尝试将 malloc 与我编写的函数一起使用,以增长唯一状态列表(无重复)

我的文件包含以下字符串:

Kmart, 295 Hartford Turnpike, Vernon CT

我编写的函数从文件中提取状态(“CT”);

#define MAX_CHARS_PER_LINE 80
void getState(char strState[], const char strLine[])
{
   char newLine[MAX_CHARS_PER_LINE+1];
   char newState[MAX_CHARS_PER_LINE+1];

   strcpy(newLine, strLine); 
   char* token = strtok(newLine, ",");

   if(token != NULL)
   {
     token = strtok(NULL,",");
     token = strtok(NULL, ",");
   }
   strcpy(newState, token);

   unsigned long length = strlen(newState)-5; 

   strcpy(strState, newState+length); 

}

这是我的主要函数,我试图使用 strcmp 找到唯一的状态列表并使用 malloc 增长它;

int main(void)
{
   char **states[3];
   char buffer[MAX_CHARS_PER_LINE+1];

   FILE* fptr;    
   fptr = fopen(fileName, "r");

   if(fptr == NULL)
   {
     exit(EXIT_FAILURE);
   }
   else
   {
     while(fgets(buffer, sizeof(buffer), fptr))
     {
       getState(states, buffer);                  
     }

     for(int i = 0; i < 3; i++)
     {
        for(int j = 0; j < 3; j++)
        {
            if(strcmp(states[i], states[j]))
            {
                states[i] = malloc(3* sizeof(states));
            }            
        }        
    }
    fclose(fptr);       
    free(states);
}

return EXIT_SUCCESS;
}

我对如何正确使用 malloc 和 strcmp 来获取这个唯一列表有点困惑。我的获取状态函数工作正常,这只是我的主要问题

最佳答案

一些事情:

a.在 getState 函数中,将长度变量从 strlen(newState)-5 更改为 strlen(newState)-2。状态只有 2 个字母,strlen 不计算终止字符。

b.不要使用三重指针来表示“状态”;使用双指针。它应该只是一串字符串。

c.使用 getState 的状态列表迭代器。确保在调用 getstates 之前重新分配以增加大小并使用备份指针复制旧状态

d.使用 getState 迭代 states 数组。

e.为第二次迭代创建第二个数组以复制每个唯一的状态名称,或者仅创建一个新的字符串变量,对其使用 getState,然后使用 strcmp 迭代状态,如果没有匹配项,则将该状态添加到 states 数组.

关于c - 将 malloc 与函数和 strcmp 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57029586/

相关文章:

c - OpenMP 任务和 while 循环

c++ - CreateDC 因网络打印机而失败 - 错误代码 1801

c++ - 段错误 : 11 and malloc errors in C++ code

mysql - Strcmp 不包含 mysql 中的工作数据

c - 通过排序在链表中插入新元素 C

c - 尝试获取 pthread_mutex_lock(&mutex) 的线程如果没有获得锁会怎样?

c - 函数 ‘getline’ 的隐式声明在一个代码中引发警告,但在另一代码中未引发

c - 使用 strcmp 和 char *arr[] 的段错误

c - 嵌套结构数组

c - 使用 malloc 函数查找空闲内存空间