将 malloc 与函数和 strcmp 一起使用
Using malloc with functions and 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 来获取这个唯一列表有点困惑。我的 get state 函数工作正常,这只是我的主要问题
几件事:
一个。在 getState 函数中,将长度变量从 strlen(newState)-5 更改为 strlen(newState)-2。状态只有2个字母,strlen不算终止字符。
b。不要对 "states" 使用三重指针;使用双指针。它应该只是一串字符串。
c。将迭代器用于 getState 的状态列表。确保 RE-MALLOC 在调用 GETSTATES
之前增加大小并使用备份指针复制旧状态
d。使用 getState 遍历状态数组。
e。为第二次迭代创建第二个数组以复制每个唯一的状态名称,或者只创建一个新的字符串变量,在其上使用 getState,然后使用 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 来获取这个唯一列表有点困惑。我的 get state 函数工作正常,这只是我的主要问题
几件事:
一个。在 getState 函数中,将长度变量从 strlen(newState)-5 更改为 strlen(newState)-2。状态只有2个字母,strlen不算终止字符。
b。不要对 "states" 使用三重指针;使用双指针。它应该只是一串字符串。
c。将迭代器用于 getState 的状态列表。确保 RE-MALLOC 在调用 GETSTATES
之前增加大小并使用备份指针复制旧状态d。使用 getState 遍历状态数组。
e。为第二次迭代创建第二个数组以复制每个唯一的状态名称,或者只创建一个新的字符串变量,在其上使用 getState,然后使用 strcmp 遍历状态,如果没有匹配项,则将该状态添加到状态数组.