在C中修改和替换char数组中的值

时间:2017-06-08 22:33:48

标签: c arrays string while-loop

正如节目所示,我不知道打印出新结果有什么问题。 例如当我用position = 0,value = v调用modify_str()函数时, 它不会出现“vello”结果,但会引发一个短暂的胡言乱语。 任何人都可以识别错误!?感谢:)

#include<stdio.h>
void print_(char *abc);
void modify_str(char *a);

void main(){
    char c[20]="Hello";
    print_(c);

    modify_str(c);

}


void print_(char *str){
    int i=0;
    while(*(str+i) != '\0'){
        printf("%c", str[i]);
        i++;
    }
    printf("\n");
}

void modify_str(char *c){
    char q[]="Position of char to modify (0-n): ";
    print_(q);
    int pos;
    scanf("%d", &pos);

    printf("value to replace: ");
    char w;
    scanf("%s", &w);

    int index=0;
    while(*(c+index) !='\0'){
        if(index==pos){
            c[index]=w;
            printf("New Result: %c\n", c);
        }
        index++;
    }
}

1 个答案:

答案 0 :(得分:1)

使用不正确的格式说明符

代替此调用
scanf("%s", &w);

使用

scanf(" %c", &w);
       ^^^

while循环应该看起来像

while( *(c+index) !='\0' && index != pos ) ++index;

if ( index == pos && *( c + index ) != '\0' )
{
        c[index]=w;
        printf("New Result: %s\n", c);
                            ^^  
}

使用标识符c命名一个字符串也是一个坏主意,该字符串通常用于命名char类型的对象。最好使用标识符s

考虑到根据C标准,没有参数的函数main应声明为

int main( void )

顺便说一下,函数print_可以像

一样实现
void print_( const char *str )
{
    puts( str );
}

不要在标识符中使用尾随下划线。这只是一种糟糕的编程风格。