首页 > 解决方案 > 反斜杠和双反斜杠

问题描述

我有一个带路径的文件。但我无法在 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); 

标签: c

解决方案


如果您正在读取输入文件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

推荐阅读