#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中,我在第一次反向后会得到额外的字母。是什么原因呢??
这是我的输出:在这里
1条答案
按热度按时间zbwhf8kr1#
这里定义了一个
char[12]
,但是没有为reverse
函数所需的\0
留出空间:字符串
结果是一个
char
数组,而不是一个null终止的字符串,所以你的函数会寻找一个\0
越界,它有 *undefined行为 *,你得到的垃圾输出就是结果。要么改成
型
或者让编译器为你计数:
型
另一种选择是将其作为一个指向字符串字面量的指针:
型
<unistd.h>
是一个非标准的头文件,它为write
和其他平台特定的功能提供了原型。你不需要那个只需要#include <stdio.h>
,并将write(1,&arr[0],1);
替换为对标准函数的调用:型