c - 反斜杠和双反斜杠
问题描述
我有一个带路径的文件。但我无法在 C 中正确阅读它们。文件中的一行示例:
C:\Trust\The\process.txt
我想要这个:
C:\\Trust\\The\\process.txt
但是如何用双反斜杠替换反斜杠?我有这个功能:
/* Replace a string */
char* replace(char* text, char* replace, char* element) {
int i, j, k;
int searchSize = strlen(text);
int replaceSize = strlen(replace);
int size = strlen(element);
char* ret;
if (!searchSize) {
ret = malloc(size + 1);
for (i = 0; i <= size; i++) {
ret[i] = element[i];
}
return ret;
}
int retAllocSize = (strlen(element) + 1) * 2;
ret = malloc(retAllocSize);
int bufferSize = 0;
char* foundBuffer = malloc(searchSize);
for (i = 0, j = 0; i <= size; i++) {
if (retAllocSize <= j + replaceSize) {
retAllocSize *= 2;
ret = (char*) realloc(ret, retAllocSize);
}
else if (element[i] == text[bufferSize]) {
foundBuffer[bufferSize] = element[i];
bufferSize++;
if (bufferSize == searchSize) {
bufferSize = 0;
for (k = 0; k < replaceSize; k++) {
ret[j++] = replace[k];
}
}
}
else {
for (k = 0; k < bufferSize; k++) {
ret[j++] = foundBuffer[k];
}
bufferSize = 0;
ret[j++] = element[i];
}
}
free(foundBuffer);
return ret;
}
我以为我可以这样使用,但它不起作用:
char *token ;
char s[]="C:\Trust\The\process.txt";
token=replace("\0x5c","\\",s);
解决方案
如果您正在读取输入文件input.txt
并且每个文件名都以换行符结尾,则应该可以:
#define MAX_LINE_LEN 1024
int main(int argc, char *argv[])
{
/* File read variables */
FILE *fp;
char buf[MAX_LINE_LEN];
char *token;
/* Open input file */
fp=fopen(argv[1], "r");
if(fp == NULL)
{
fprintf(stderr, "Unable to open input file. Exiting...");
return 1;
}
/* Get each line and print result */
while ((fgets(buf, sizeof(buf), fp)) != NULL) {
token=replace("\\", "\\\\", buf);
printf("%s", token);
}
fclose(fp);
return 0;
}
输入input.txt
::
C:\Trust\The\process.txt
输出:
C:\\Trust\\The\\process.txt
推荐阅读
- javascript - 如何将汇总与 sirv 一起用于苗条的应用程序
- node.js - Discord bot 在 azure app 服务上 5 分钟后下线
- reactjs - 未找到 ReactJS 在此服务器上未找到请求的 URL /AboutMe
- java - 在服务器启动时获取 java.lang.ClassNotFoundException: org.apache.struts2.tiles.StrutsTilesListener - Struts 2.3.28 & Tile-core-2.2.2
- ruby-on-rails - 如何在rails中渲染多个脚手架表?
- python - 练习 Linux Shell 脚本
- php - 从年假中扣除假期余额
- r - 在 R Shiny 中跨多个模块使用 reactiveValues
- google-chrome - SameSite 更新 Chrom。对于未设置的同站点值,控制台显示不“松懈”
- terraform - 由于某些身份验证错误,带有 gcp 提供程序的 terraform 无法应用