所以我有下面的代码,我试图理解指针的基本原理,所以我想更改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/

10-09 00:29