这是我关于stackoverflow的第一个问题,通常我会搜索示例并尝试理解它们,但我有点腌渍。 如果我没有以合理的速度回复,我会提前道歉,因为这是我第一次使用这个,所以这里有...
我正在创建一个新系统来尝试并可能恢复已删除的数据,以及永久删除数据的能力。
我遇到的麻烦是......
如果用户输入文件路径: C:\剃须龟
除非用户输入,否则系统将无法识别文件路径 - > C:\\剃须龟。
所以我的问题是如何复制反斜杠或用\\替换反斜杠或只是让系统识别\并在其后面添加另一个(或在前面)?
我正在VS中开发这个。
gets(array1);
arrayLength = strlen(array1);
for(c = 0; c < arrayLength; c++) {
if(array1[c] == '\\') {
array1[c+1] = '\\';
}
}
printf(array1);
return 0;
}
我希望我没有错过任何事情,谢谢你的时间。
答案 0 :(得分:2)
如果在源代码中使用常量字符串 ,则必须复制每个反斜杠字符,以便编译器将其识别为反斜杠字符,而不是而不是反斜杠后面的字母所表示的特殊字符。
例如:
在char* str = "C:\not good"
中,编译器会将\n
标识为换行符。
在char* str = "C:\\very good"
中,编译器会将\\
标识为反斜杠字符。
但是在运行时从键盘上读取字符串时,您无需担心这一点。
答案 1 :(得分:0)
您的功能会在第一个\
之后生成所有内容\
。
让我们使用您的示例输入 - C:\shaving turtle
。
当c为2时,您会找到\
。
您将array1[3]
设置为\
。
然后检查array1[3]
的值,即\
。
您将array1[4]
设置为\
。
直到你到达数组末尾为止。此时,您还用\
替换了结尾的空字符。您的字符串不再是以空字符结尾的字符串。
您可以解决在另一个字符串中进行更改的问题。步骤进行:
arrayLength+numBackslashes
的新字符串。希望能让你前进。
答案 2 :(得分:0)
您不需要在字符串中加倍反斜杠,但如果确实认为需要这样做,您可以将字符串复制到单独的缓冲区中,或者展开字符串在同一缓冲区中,但向后......
在第一种情况下,您不需要使用strlen
,因为您将扫描字符串,并且会自然地遇到NUL
终止符:
char array1[SOMETHING_BIG_ENOUGH];
char array2[2*SOMETHING_BIG_ENOUGH];
char *p = array1;
char *q = array2;
char c;
gets(array1); /* tut-tut */
while ((c = *p++) != '\0') {
*q++ = c;
if (c == '\\')
*q++ = '\\';
}
*q = '\0';
这会将展开的字符串保留在array2
。
第二种情况比较棘手但使用的空间更少:
char array1[2*SOMETHING_BIG_ENOUGH];
char *p;
char *q;
gets(array1); /* tut-tut */
p = &array1[strlen(array1)];
q = &array1[sizeof(array1)];
*--q = '\0';
while (p != array1) {
if ((*--q = *--p) == '\\')
*--q = '\\';
}
这会将展开的字符串留在array1
的上半部分,q
指向第一个字符。