使用printf无法看到对char数组的更改

时间:2017-04-19 16:18:19

标签: c string string-literals

我正在编写一个C函数来改变字母之间的大小写:将大写字母改为小写字母,将小写字母改为大写字母。代码编译没有错误,但不打印任何内容。为什么呢?

#include<stdio.h>
#include<String.h>
void NOMB_car_chif(char a[])
{
  int i;
  for(i=0; i<strlen(a); i++){

    if(a[i]>=65 && a[i]<=90)
        a[i]=a[i]+32;
    else
        a[i]=a[i]-32;

    printf("%s" ,a);

   }
}

void main()
{
  NOMB_car_chif("Welcome To My Word");  
}

2 个答案:

答案 0 :(得分:1)

电话

 NOMB_car_chif("Welcome To My Word");

将字符串文字作为参数传递,如果尝试修改,则会导致undefined behavior。您需要将指针传递给可修改的内存位置,例如,数组。

也就是说,转换操作是错误的。 else部分适用于所有 大写字母表的ASCII代码之外的值不是您想要的。您需要检查小写字母的范围,然后执行减法以转换为大写。

最后,提出了几点建议:

  • 请勿使用6590等幻数,请使用相应的字符常量,例如'a''z'等。
  • 对于托管环境,main()的符合签名至少为int main(void)

答案 1 :(得分:0)

#include<stdio.h>
#include<string.h> 
void NOMB_car_chif(char a[1000])
{
int i=0,b=0;
for(i =0;i<strlen(a);i++)
{
    if(a[i]>=65 && a[i]<=90)
    b=a[i]+32;
    else if(a[i]>=97&&a[i]<=122)
    b=a[i]-32;
    else
    b=a[i];
    printf("%c",b);
    }
 }
 void main()
 {
    NOMB_car_chif("Welcome To My Word");  
 }

解决您的问题。 您必须在代码中使用%c代替%s。