在数组中反转字符的问题

时间:2013-12-30 14:18:24

标签: c

我这里有一个数组,一个人的名字是通过键盘输入的,我必须反转它,但由于某种原因,每当我运行代码时它都会为null

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void reverse_name(char *pointer, int length);

int main()
{//open main

    char name[20];
    int size;
    printf("enter name\n");
    scanf("%s", name);
    size  = strlen(name);
    reverse_name(name, size);

    return 0;
}//close main

void reverse_name(char *pointer, int length)
{//reverse open
    int i;
    for(i =0;i<length;i++)
    {//open for
        pointer[i] = pointer[length - i];
    }//close for

    printf("new name is %s", *pointer);
}//reverse close

3 个答案:

答案 0 :(得分:1)

应该是

pointer[i] = pointer[length - i - 1];

你实际上正在考虑超出其长度的阵列单元格。

答案 1 :(得分:1)

问题在于:

printf("new name is %s", *pointer);

在这里,您尝试将单个字符打印为字符串。删除解除引用操作符。

此外,您实际上反转了字符串两次。仅循环一半字符串长度。

答案 2 :(得分:0)

修复示例。

#include <stdio.h>
#include <string.h>

void reverse_name(char *pointer, int length);

int main(void){
    char name[20];
    int size;
    printf("enter name\n");
    scanf("%19s", name);
    size  = strlen(name);
    reverse_name(name, size);
    printf("new name is %s", name);

    return 0;
}

void reverse_name(char *pointer, int length){
    int front = 0, back = length-1;
    while(front < back){
        char ch = pointer[front];
        pointer[front++] = pointer[back];
        pointer[back--]  = ch;
    }
}