这是我尝试的代码:
#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"));
}
Run Code Online (Sandbox Code Playgroud)
但是,该printf语句main仅打印相同的路径。我在网上找到了另一个与此相关的资源,其逻辑似乎与我的相同,因此我不确定我的错误在哪里。我尝试这样做direc[i] == "/",但这给出了相同的结果。我也尝试替换随机字母,但这也失败了。
我也尝试使用指针来执行此操作,但这也不起作用。
char *convertDirec(char direc[]){
for(char *p = direc; *p != '\0'; ++p){
if(*p == '/')
*p='\\';
}
return direc;
}
Run Code Online (Sandbox Code Playgroud)
任何帮助表示赞赏,谢谢。
让编译器帮助您:
test.c: In function ‘convertDirec’:
test.c:8:21: warning: statement with no effect [-Wunused-value]
direc[i]=='\\';
~~~~~~~~^~~~~~
Run Code Online (Sandbox Code Playgroud)
这会将当前char与之比较,'\\'并将结果丢弃(因此,警告)。
第二个版本失败,因为char文字不可写,并且写入是未定义的行为,因此您需要将其复制到您可能要写入的内存位置,或者char*从其他位置获取非const :
//Same as above
int main(int argc, char** argv){
printf("%s", convertDirec(argv[1]));
}
Run Code Online (Sandbox Code Playgroud)
$ ./test c:/Users/
c:\Users\
Run Code Online (Sandbox Code Playgroud)
direc[i] == '\\';应该是direc[i] = '\\';,这就是为什么什么也没发生的原因。
当然,如果您修复它,很可能会崩溃,因为您不应该写入字符串文字。您可以改为:
int main() {
char string[] = "C:/Users/user/Documents/data.csv"; // you can modify this copy
printf("%s", convertDirec(string));
}
Run Code Online (Sandbox Code Playgroud)