这是我关于堆栈溢出的第一个问题,通常我会寻找例子并试图理解它们,但我有点为难。如果我没有以合理的速度回复,我提前表示歉意,因为这是我第一次使用这个,所以这里…
我正在创建一个新的系统,尝试并可能恢复已删除的数据以及永久删除数据的能力。
我遇到麻烦的是..。
如果用户输入文件路径:C:\剃须刀
除非用户输入->C:\剃须刀,否则系统不会识别文件路径。
因此,我的问题是如何复制反斜杠或用\替换反斜杠,或者让系统识别\并在后面添加另一个反斜杠(或者在前面)?
我是用VS开发的。
gets(array1);
arrayLength = strlen(array1);
for(c = 0; c < arrayLength; c++) {
if(array1[c] == '\\') {
array1[c+1] = '\\';
}
}
printf(array1);
return 0;
}我希望我没有错过任何东西,谢谢你抽出时间。
发布于 2014-03-15 19:16:58
您不需要重复使用字符串中的反斜杠,但是如果您真的觉得有必要这样做,可以将字符串复制到单独的缓冲区中,或者在同一个缓冲区中展开字符串,但是可以向后.
在第一种情况下,您不需要使用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指向第一个字符。
发布于 2014-03-15 19:06:20
如果在源代码中使用常量字符串,则必须复制每个反斜杠字符,以便编译器将其标识为反斜杠字符,而不是由反斜杠后面的字母指示的特殊字符。
例如:
在char* str = "C:\not good"中,编译器将将\n标识为换行符。
在char* str = "C:\\very good"中,编译器将将\\标识为反斜杠字符。
但是,在运行时从键盘读取字符串时,不必担心这一点。
发布于 2014-03-15 19:03:36
您的函数将使第一个\成为\之后的一切。
让我们使用您的示例输入- C:\shaving turtle。
当c为2时,可以找到一个\。
您将array1[3]设置为\。
然后检查array1[3]的值,它是一个\。
您将array1[4]设置为\。
这种情况一直持续到数组的末尾。此时,您还用\替换了结束空字符。您的字符串不再是以空结尾的字符串。
您可以修复在另一个字符串中进行更改的问题。步骤:
arrayLength+numBackslashes的新字符串。希望这能让你继续前进。
https://stackoverflow.com/questions/22428254
复制相似问题