c - 为什么这个猪拉丁词转换代码不起作用
问题描述
猪拉丁词转换
#include<stdio.h>
#include<string.h>
int main()
{
char s[100],pg[100];
int len,i,j,k;
printf("Enter a word: ");
scanf("%[^\n]s",s);
len=strlen(s);
for(i=0;i<len;i++)
{
if(s[i]>=65&&s[i]<=90)
{
s[i]=s[i]+32;
}
}
for(i=0;i<len;i++)
{
if(s[i]=='a'|| s[i]=='e'||s[i]=='i'||s[i]=='o'||s[i]=='u')
{
break;
}
}
pg[len]='a';
pg[len+1]='y';
for(j=0;j<len-i;j++)
{
pg[j]=s[i+j];
}
for(k=0;k<i;k++)
{
pg[j+k]=s[k];
}
printf("Pig Latin word is: %s",pg);
}
我在任何步骤检查了这些字母是否不是分配的所需字母。但不是。通过而不是使用该行
printf("Pig Latin word is: %s",pg);
如果我使用
for(i=0;i<len+2;i++)
{
printf("%c",pg[i]);
}
它显示正确。为什么
解决方案
您的代码按原样对我有用,但这可能是运气。您仍然需要零终止您的字符串,因为声明为局部变量的数组不一定初始化为零。尝试添加:
pg[len + 2] = '\0';
不相关,但也考虑在 printf 格式字符串中包含换行符:
printf("Pig Latin word is: %s\n", pg);
如果你给它一个字符串,你的代码也会中断
this string is over 100 characters long this string is over 100 characters long this string is over 100 characters long
您需要确保进行正确的边界检查。
推荐阅读
- python - 使用 Dask 并行化对象实例化
- php - 从 WooCommerce 前端的下拉列表中删除特定变化
- javascript - 有没有办法在 JavaScript 中使用“prompt()”插入图像?
- python - 如何在linux中使用python检测当前的鼠标光标类型?
- php - 如何使用 AJAX 发布和更新 jQuery 序列化
- appium - Appium-Selenium :如果没有找到元素,则处理代码
- docker - 反向代理容器化 Angular 应用程序
- json - Spring Boot 自定义 JSON 序列化器在集成测试中被忽略
- spring-batch - 推荐哪个 Spring Batch 版本用于生产,4.2.7 或 4.3.3?
- laravel - 部分未显示在浏览器上