C语言 为什么我得到额外的字母之间的字符串当我试图扭转

nhhxz33t  于 2023-08-03  发布在  其他
关注(0)|答案(1)|浏览(109)
#include<unistd.h>

void reverse(char arr[]){
if(arr[1]!='\0'){
reverse(&arr[1]);
}
write(1,&arr[0],1);
}
int main(){
char text[12] = "this is text";
reverse("try ");
reverse(text);
}

字符串
在这里,我试图用两种不同的方式来颠倒两个不同的字符串。它在另一个编辑器中工作得相当好。但在VScode中,我在第一次反向后会得到额外的字母。是什么原因呢??
这是我的输出:在这里

zbwhf8kr

zbwhf8kr1#

这里定义了一个char[12],但是没有为reverse函数所需的\0留出空间:

char text[12] = "this is text";

字符串
结果是一个char数组,而不是一个null终止的字符串,所以你的函数会寻找一个\0越界,它有 *undefined行为 *,你得到的垃圾输出就是结果。
要么改成

char text[13] = "this is text";


或者让编译器为你计数:

char text[] = "this is text"; // same as: char text[13] = ...;


另一种选择是将其作为一个指向字符串字面量的指针:

const char *text = "this is text";


<unistd.h>是一个非标准的头文件,它为write和其他平台特定的功能提供了原型。你不需要那个只需要#include <stdio.h>,并将write(1,&arr[0],1);替换为对标准函数的调用:

putchar(arr[0]);

相关问题