【发布时间】:2015-07-28 08:09:22
【问题描述】:
我有一个程序来反转字符串并将其转换为大写。如果我写helloworld!,输出一定是!DLROWOLLEH。但是如果我写hello world!,输出是!DLRO。你能告诉我可能的问题在哪里吗?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
char * reverse(const char * text)
{
if (text==NULL)
return NULL;
int length = strlen(text);
char * reversed_string = malloc(length+1);
for(int i = 0; i < length/2; ++i)
{
reversed_string[i] = text[(length-1) - i];
reversed_string[(length-1) - i] = text[i];
}
reversed_string[length] = '\0';
//upper(reversed_string);
return reversed_string;
}
void upper(char *str1)
{
while(*str1!='\0')
{
if(*str1>96&&*str1<123)
*str1=*str1-32;
str1++;
}
}
int main(int argc, char * argv[])
{
char p[256];
fgets(p, sizeof(p), stdin);
char * rev_str = reverse(p);
upper(rev_str);
printf("%s\n", rev_str);
rev_str = 0;
return 0;
}
【问题讨论】:
-
你真的在定义
upper()insidereverse()??? -
@SouravGhosh 这是一个 gcc 扩展,因此它可能是有效代码,这是一个坏主意,实际上某些编程语言允许或鼓励它,我没有看到用例,但我害怕学过它的程序员。这样做的明显原因是外部函数的局部变量在内部函数中是可见的,这并不是说您不能将它们作为参数传递并对其进行任何您喜欢的操作,因此使用此技术意味着存在问题理解结构化编程,虽然它是一个非常复杂的结构。
-
是的,这是个大问题吗?
-
@iharob 最后一行是我试图表达的意思。 :-)
-
@JakubEliaš 这不是标准的,这是一个坏主意,糟糕的设计。
标签: c string uppercase lowercase