gpt4 book ai didi

C 在名称文件后添加一些单词

转载 作者:行者123 更新时间:2023-11-30 18:31:15 25 4
gpt4 key购买 nike

void compressione(FILE* iDizionario, FILE* posizioneCorrente, FILE* iCorrispondenza, char* argv) {
char* nomeFile;
nomeFile = (char*)malloc( (3+strlen(argv))*sizeof(char) );
strcpy(nomeFile, argv);
nomeFile[strlen(argv)+1] = '.';
nomeFile[strlen(argv)+2] = 'g';
nomeFile[strlen(argv)+3] = 'f';
...

简单:
argv 是一个指向 char 的指针,它指向一个 char 数组“input.txt”

char* nomeFile

在堆内存上占用一个与 argv 指针大小相同但多了 3 个字节的空间。
之后我从 argv 复制到 nomeFile 所以现在两者都有 input.txt现在(因为 nomeFile 指针多了 3 个字节)在这 3 个字节中我想放入 '.'、'g' 和 'f' 字符。
所以我的想法是:我正好在名称文件+1的末尾添加第一个字符,其他两个字符的逻辑相同。
但没有发生任何事情...在 Debug模式下,nomeFile 指针具有相同的字符串。

最佳答案

您没有为 nomeFile 中的尾随 0 字节留出空间。 strlen() 不计算该字节。由于数组索引从 0 开始,因此当您将第一个字符写入 strlen(argv)+1 时,您将在 0 字节之后写入,因此添加永远不会显示向上。

应该是:

size_t len = strlen(argv);
nomeFile = (char*)malloc( (4+len)*sizeof(char) );
strcpy(nomeFile, argv);
nomeFile[len] = '.';
nomeFile[len+1] = 'g';
nomeFile[len+2] = 'f';
nomeFile[len+3] = 0;

继续调用 strlen(argv) 也是一个坏主意。每次都必须在字符串中搜索 0 字节。我已经调用过一次并将其保存在变量中。恕我直言,它还使代码更具可读性。

您还可以使用strcat():

strcpy(nomeFile, argv);
strcat(nomeFile, ".gf");

关于C 在名称文件后添加一些单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25335711/

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