所以我有下面的代码,我试图理解指针的基本原理,所以我想更改first
中的值/字符串,同时也保留它,因此使用second
。
问题是,无论输入是什么,函数都会打印0
然后打印1
(值i
)
然后坠毁。我能清楚地看到这与循环有关,但我不明白为什么!
有谁能向我解释为什么会发生这种事,以及我怎样才能避免这种事?
#include <stdio.h>
#include <string.h>
void spells( char **str ){
int i = 0, len = strlen(*str);
while( i < len ){
printf("%d\n",i); //just to check
if( ( (int)*str[i] )%3 == 0 ){// if the ascii value is divided by 3
*str[i] = '#';
}
i++;
} puts("done");
}
int main(){
char first[20];
char* second = &first;
scanf("%s", first);
spells( &second );
printf("%s", second);
printf("\n%s", first);
return 0;
}
最佳答案
尝试这样做:
(这是一个优先问题。提示:如果您在函数内部执行了str[1]
操作,那么它的值应该是多少?)
if( (*str)[i] %3 == 0 ){// if the ascii value is divided by 3
(*str)[i] = '#';
}
但是您没有以这种方式保留任何内容,因为从
spells
函数中,您仍然在修改main:char first[20]
中创建的字符串实例。如果要保留任何内容,请复制字符串并对副本进行操作。
关于c - 了解指针,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47968637/