我写了一个反转字符串的代码。但在输出中它产生了一些垃圾。为什么?
I've written a code for reverse a string. But in output it is generating some garbage. Why?
这是我的代码。对于 o/p 中超过 3 个字母的单词,会生成垃圾值。
#include<stdio.h>
#include<stdlib.h>
int main(){
char a[50],b[50];
gets(a);
puts(a);
int len,i,j;
i=0;
while(a[i]!='[=10=]'){
i++;
}
printf("Length: %d",i);
//reverse
len = i;
j=len-1;
for(i=0;i<=len-1;i++){
printf("\ni=%d j=%d",i,j);
b[i]=a[j];
j--;
}
printf("\n___REVERSED TEXT___\n");
puts(b);
}
对于初学者来说,程序中没有使用来自 header <stdlib.h>
的声明。所以这个指令
#include<stdlib.h>
可能会被删除。
根据 C 标准,不带参数的函数 main
应声明为
int main( void )
函数 gets
不安全,C 标准不再支持它。而是使用函数 fgets
.
当存储在数组 a
中的字符串被复制到数组 b
时,终止零也应该被复制到结果字符串的末尾。
程序可以这样看
#include <stdio.h>
#define N 50
int main( void )
{
char a[N], b[N];
fgets( a, sizeof( a ), stdin );
size_t length = 0;
while ( a[length] != '[=12=]' && a[length] != '\n' ) ++length;
a[length] = '[=12=]';
puts( a );
size_t i = 0;
for ( ; i < length; i++ ) b[i] = a[length - i - 1];
b[i] = '[=12=]';
printf("\n___REVERSED TEXT___\n");
puts( b );
return 0;
}
它的输出可能看起来像
Hello, World!
Hello, World!
___REVERSED TEXT___
!dlroW ,olleH
#include<stdio.h>
#include<string.h>
int main(void){
char a[50],b[50];
printf("\nWhat is the word?");
scanf("%s", a); fflush(stdin);
int j;
printf("Length: %lu",strlen(a));
for(j = strlen(a) - 1; j >= 0; j--){
b[strlen(a) - 1 - j] = a[j];
}
printf("\n___REVERSED TEXT___\n");
printf("\n%s", b);
}
- 使用string.h的strlen函数获取字符串的大小;
- for从字符串a的末尾开始填充字符串b
这是我的代码。对于 o/p 中超过 3 个字母的单词,会生成垃圾值。
#include<stdio.h>
#include<stdlib.h>
int main(){
char a[50],b[50];
gets(a);
puts(a);
int len,i,j;
i=0;
while(a[i]!='[=10=]'){
i++;
}
printf("Length: %d",i);
//reverse
len = i;
j=len-1;
for(i=0;i<=len-1;i++){
printf("\ni=%d j=%d",i,j);
b[i]=a[j];
j--;
}
printf("\n___REVERSED TEXT___\n");
puts(b);
}
对于初学者来说,程序中没有使用来自 header <stdlib.h>
的声明。所以这个指令
#include<stdlib.h>
可能会被删除。
根据 C 标准,不带参数的函数 main
应声明为
int main( void )
函数 gets
不安全,C 标准不再支持它。而是使用函数 fgets
.
当存储在数组 a
中的字符串被复制到数组 b
时,终止零也应该被复制到结果字符串的末尾。
程序可以这样看
#include <stdio.h>
#define N 50
int main( void )
{
char a[N], b[N];
fgets( a, sizeof( a ), stdin );
size_t length = 0;
while ( a[length] != '[=12=]' && a[length] != '\n' ) ++length;
a[length] = '[=12=]';
puts( a );
size_t i = 0;
for ( ; i < length; i++ ) b[i] = a[length - i - 1];
b[i] = '[=12=]';
printf("\n___REVERSED TEXT___\n");
puts( b );
return 0;
}
它的输出可能看起来像
Hello, World!
Hello, World!
___REVERSED TEXT___
!dlroW ,olleH
#include<stdio.h>
#include<string.h>
int main(void){
char a[50],b[50];
printf("\nWhat is the word?");
scanf("%s", a); fflush(stdin);
int j;
printf("Length: %lu",strlen(a));
for(j = strlen(a) - 1; j >= 0; j--){
b[strlen(a) - 1 - j] = a[j];
}
printf("\n___REVERSED TEXT___\n");
printf("\n%s", b);
}
- 使用string.h的strlen函数获取字符串的大小;
- for从字符串a的末尾开始填充字符串b