【问题标题】:Convert forward slashes to backlashes [closed]将正斜杠转换为反斜杠[关闭]
【发布时间】:2019-11-19 02:52:15
【问题描述】:

这是我尝试的代码:

#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"));
}

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

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

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

感谢您的帮助,谢谢。

【问题讨论】:

  • "C:/Users/user/Documents/data.csv" 这是一个字符字面量,只读...
  • 打开编译器警告:它应该会提醒您将 const 数组传递给函数的问题。
  • @Jean-FrançoisFabre 我可能会误解,但函数不是这样分配它char direc[] = "C:/Users/user/Documents/data.csv",这不是字面意思吗?
  • 即使有,缓冲区会分配到哪里?
  • 啊这是一个错字问题...== 而不是=

标签: c string loops


【解决方案1】:

让编译器帮你:

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\

【讨论】:

  • 理想情况下,您应该在使用之前检查argv[1] 不是空指针(argc &gt; 1)。
【解决方案2】:

direc[i] == '\\'; 应该是direc[i] = '\\';,这就是为什么没有任何反应。

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

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

【讨论】:

    猜你喜欢
    • 2014-09-28
    • 2020-11-10
    • 2016-08-07
    • 2011-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-27
    相关资源
    最近更新 更多