gpt4 book ai didi

在 C 中连接路径和变量

转载 作者:行者123 更新时间:2023-12-02 05:36:03 26 4
gpt4 key购买 nike

这是我的代码。我需要用这种格式创建 10 个文件:

0.txt
1.txt
...

但是我做不到,结果不一样。谁能帮忙?

#include <stdlib.h>
#include <string.h>


char* direccion(char *dirD,int number){
char buffer[100];
char *n;
char *q;
char* formato=".txt";

sprintf(buffer, "%i", number);
n= strcat(dirD,buffer);
q= strcat(n,formato);

return q;

}
int main(){
int u;
int number= 0;
int t= 0;
char* q = "e:/c9/";
for(t=0; t< 10 ; t++){

char* dir = direccion(q,number);

if(fopen(dir,"w")){
fopen(dir,"w");
u=1;
}
else{
u=0;
printf("Error\n");
}
number++;

}
return 0;
}

谢谢!

最佳答案

第一个问题是:

char *q = "e:/c9/";
for(t = 0; t < 10; t++)
{
char *dir = direccion(q, number);
}

变量 q 是一个字符串文字。但是,在函数 direccion() 中,您将它作为第一个参数传递给 strcat(),它会尝试修改它 — BOOM,一个段错误。解决方案:

char buf[1000];
strcpy(buf, "e:/c9/");
char *dir = direccion(buf, number);

问题#2 正如@Charlie Martin 指出的那样,您返回一个静态 自动分配的本地字符串,该字符串在direccion() 函数返回后无效。也许

return strdup(buffer);

在这种情况下;不要忘记在使用后释放它。

编辑:看来你甚至都不问这个。您可以使用 open() 系统调用(函数)创建文件:

#include <fcntl.h>
#include <stdio.h>

int fd = open("file.txt", O_RDWR | O_CREAT, 0644);
close(fd);

当然,用您想要的实际文件模式替换 0644(但不要使文件可执行,除非它包含要执行的程序)。

编辑 2:我什至没有听懂这个...所以,在 for 循环中,你想一遍又一遍地重置基本文件名:

for (yadda yadda)
{
strcpy(buf, "e:/c9/");
char *dir = direccion(buf, i);
}

等等

关于在 C 中连接路径和变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11695781/

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