2016-12-05 60 views
-2

我对C真的很陌生,所以也许这个问题太简单或者不相关。但我没有找到这个问题的答案。查找文件夹中的特定文件并对其进行编辑

我有文件夹命名为:-90.txt,-89.txt,...,0.txt,1.txt,2.txt,...,90.txt。

我需要一些函数,它将接收数字(文件夹名称)作为参数并打开该文件。

function editFile(number){ 
    fp=fopen("/data/" + number + ".txt", "wr"); 

    ... 
    // do some other things 
} 
+2

在C你不能建立在这样的字符串。使用'sprintf'在本地变量中创建文件名。 –

+0

我知道我不能。这是一种伪代码,它显示了我真正需要的东西。 – hasan

回答

2

在C中,您无法灵活地向字符串添加数字。如果你想附加一个数字到一个字符串,那么首先你必须使用itoa函数将它转换成一个字符串。你可以找到关于该功能的在线文档。

这里是使用itoasprintf

  • 那么你会怎么用C

    • 首先将号码添加到字符串转换成数字符串(其存储在char[]类型的新缓冲区)大纲创建一个类型为char[]的新缓冲区。确保您创建了足够大的文件以保存完整的文件路径。
    • 然后使用strcat来追加这两个字符串。

    除了上述所有过程,您还可以使用sprintf

    • 然后您可以将结果传递给fopen
  • +0

    感谢您提供修改建议。我已经更新了答案。 – crypton3535

    1

    C不具有级联的想法字符串。所以,如果你想连接字符串必须使用的功能是这样的:

    function editFile(char* number) 
    { 
        char pathName[MAX_PATH]; 
        strcpy(pathName, "/data/"); 
        strcat(pathName, number); 
        strcat(pathName, ".txt"); 
        fp=fopen(pathName, "wr"); 
    
        ... 
        // do some other things 
    } 
    

    您可以利用sprintf把它缩短。但是你应该增加安全检查,因为你有缓冲区溢出的风险。提示:strcpy_s,strccat_s,sprintf_s。 (但这'超出了你的问题的答案。)

    1

    在C中,你不能以这种方式建立一个字符串。使用sprintf在局部变量中创建文件名。

    char filename[1024]; 
    sprintf(filename, "/data/%d.txt", number); // assume that a signed value comes from `int` 
    fp = fopen(filename, "w+");    // replaced "wr" 
    
    1

    您可能习惯了高级语言,您可以通过连接整数,浮点数,其他字符串等来“构建”字符串。这不起作用在C.

    正如评论@WeatherVane指出的那样,sprintf功能对于工作的工具:

    char buffer[PATH_MAX]; // assuming POSIX 
    sprintf(buffer, "/data/%d.txt", number); 
    fp = fopen(buffer, "wr"); 
    
    相关问题