我这里有一个数组,一个人的名字是通过键盘输入的,我必须反转它,但由于某种原因,每当我运行代码时它都会为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
答案 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;
}
}