gpt4 book ai didi

C strcpy 崩溃代码

转载 作者:行者123 更新时间:2023-11-30 19:05:59 24 4
gpt4 key购买 nike

我有以下代码,每当调用 strcpy 函数时,代码就会崩溃。当这些行被注释掉时,代码不会崩溃。怎么了?

char cities[80][17];
char char_distances[40][2];
int distances[40];
char cities_sorted[20][17];

while (!feof(Text)) {
fscanf(Text, "%[^\t]\t%[^\t]\t%[^\n]\n",
cities[i], cities[i + 1], char_distances[i]);
distances[i] = atoi(char_distances[i]);
printf("City_start: %s City_end: %s Distance: %d \n",
cities[i], cities[i + 1], distances[i]);
static char uniqueCities[21][17];
int uniqueCitiesCount;
for (int j = 0; j < 21; j++) {
printf("%s\n", uniqueCities[i]);
bool start_unique = !areEqual(cities[i], cities[j]);
bool end_unique = !areEqual(cities[i], cities[j + 1]);
if (start_unique) {
strcpy(uniqueCities[uniqueCitiesCount], cities[i]);
uniqueCitiesCount++;
}
if (end_unique) {
strcpy(uniqueCities[uniqueCitiesCount], cities[i + 1]);
strcpy(uniqueCities[uniqueCitiesCount], cities[i + 1]);
uniqueCitiesCount++;
}
}
i++;
}

谢谢

最佳答案

出了什么问题?

很多事情:

  • 您发布了一个代码片段:这不足以帮助诊断您的问题。发布的代码无法编译和测试,甚至没有片段中所有符号的定义:Text 是如何定义的?它是怎么打开的?它保证与NULL不同吗?

  • i 没有在片段中定义,它是如何定义的?初始化了吗?

  • while (!feof(Text)) 不是测试输入结束的好方法,您应该比较 fscanf() 的结果达到预期的转化次数。

  • fscanf(Text, "%[^\t]\t%[^\t]\t%[^\n]\n", 没有足够的信息避免缓冲区溢出。应按以下方式指定要存储到数组中的最大字符数:fscanf(Text, "%16[^\t]\t%16[^\t]\t%1[^\n]\n",。但是请注意,如果输入与这些限制不一致,转换将失败,并且输入文件的其余部分将不同步读取。您应该将行读入一行缓冲并使用 sscanf() 解析这些行。

  • char char_distances[40][2]; 定义一个只能包含 1 个字符和一个空终止符的数组的数组。输入文件中的距离必须全部表示为单个数字。您可能应该定义更大尺寸的数组,或者使用 %d 转换说明符将距离直接转换为 distances 数组。

  • int uniqueCitiesCount; 定义未初始化的局部变量。在循环中使用它会调用未定义的行为,因为您可能尝试访问超出 2D 数组末尾的内容。

  • printf("%s\n", uniqueCities[i]); 将打印一个空字符串,因为尚未将任何城市复制到此数组。

    <
  • bool start_unique = !areEqual(cities[i], cars[j]); boolareEqual() > 已定义?

  • strcpy(uniqueCities[uniqueCitiesCount],城市[i + 1]); 重复。索引i + 1不正确。

  • 循环中的逻辑是扭曲的并且可能有缺陷。您只需将城市名称与 uniqueCities 中的所有条目进行比较,如果未找到,则仅将其添加到循环后的此数组中。

关于C strcpy 崩溃代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48842748/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com