将正斜杠转换为反斜杠

时间:2019-07-09 14:05:37

标签: c string loops

这是我尝试输入的代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char *convertDirec(char direc[]){
    for(int i = 0; i < strlen(direc); i++){
        if(direc[i]=='/'){
            direc[i]=='\\';
        }
    }
    return direc;
}

int main(){
    printf("%s", convertDirec("C:/Users/user/Documents/data.csv"));
}

但是,printf中的main语句仅打印相同的路径。我在网上找到了另一个与此相关的资源,其逻辑似乎与我的相同,因此我不确定我的错误在哪里。我尝试做direc[i] == "/",但这得到了相同的结果。我也尝试替换随机字母,但这也失败了。

我也尝试使用指针来执行此操作,但这也不起作用。

char *convertDirec(char direc[]){
    for(char *p = direc; *p != '\0'; ++p){
        if(*p == '/')
            *p='\\';
    }
    return direc;
}

感谢您的帮助,谢谢。

2 个答案:

答案 0 :(得分:8)

让编译器为您提供帮助:

test.c: In function ‘convertDirec’:
test.c:8:21: warning: statement with no effect [-Wunused-value]
             direc[i]=='\\';
             ~~~~~~~~^~~~~~

这会将当前字符与'\\'进行比较,并丢弃结果(因此,发出警告)。

第二个版本失败,因为char文字不可写,并且写入是未定义的行为,因此您需要将其复制到您可能要写入的内存位置,或者获取非常量char*从其他地方:

//Same as above

int main(int argc, char** argv){
    printf("%s", convertDirec(argv[1]));
}
$ ./test c:/Users/
c:\Users\

答案 1 :(得分:5)

direc[i] == '\\';应该是direc[i] = '\\';,这就是为什么什么也没发生的原因。

当然,如果您修复它,很可能会崩溃,因为您不应该写入字符串文字。您可以改为:

int main() {
    char string[] = "C:/Users/user/Documents/data.csv"; // you can modify this copy
    printf("%s", convertDirec(string));
}