我得到了这个程序而不是打印" - "在有空间的地方,改变功能,以便用#34; - "
取代空间。#include<stdio.h>
void sp_to_dash(const char *s);
int main(){
sp_to_dash("this is a test");//using the function
return 0;
}//end of main
void sp_to_dash(const char *str){//start of the function
while(*str){//start of while
if(*str==' ')printf("%c",'-');
else printf("%c",*str);
str++;
}//end of while
}//end of function
我确实改变了它并且它以一种熟悉的方式起作用:
#include<stdio.h>
void sp_to_dash(char *s);
int main() {
char str[] = "this is a test";
sp_to_dash(str);
printf("%s", str);
getchar();
return 0;
}//end of main
void sp_to_dash(char *str){
while (*str) {
if (*str == ' ') *str= '-';
str++;
}//enf of while
}//end of sp_to_dash
现在我不明白的东西,在原始代码中(未更改)我发送给函数一个直接字符串然后它接受了它但是在第二个代码中(更改了一个) 我必须创建一个新的字符串让它接受:
char str[]="this is a test";
为什么我不能做类似的事情:
#include<stdio.h>
void sp_to_dash(char *s);
int main() {
sp_to_dash("this is a string");
return 0;
}//end of main
void sp_to_dash(char *str){
while (*str) {
if (*str == ' ') *str= '-';
str++;
}//enf of while
}//end of sp_to_dash
答案 0 :(得分:0)
这是因为字符串文字被定义为const char *
,这意味着您不能修改它的内容。我相信您遇到了一些编译错误,例如“无法将const char *
转换为char *
”。在这种情况下,最好不要试图通过强制转换为(char *)
来欺骗编译器,因为它会导致未定义的行为。
一旦您将字符串定义为char str[]="this is a test";
,您实际上创建了一个char
数组,并将其初始化为包含“这是一个测试”的字母(最后是\0
。
指向此数组中任何元素的指针类型为char *
,因此编译成功传递。