下面是一道筆試題目,小寫轉化為大寫的
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char * convert(const char *dest)
{
int ilen = 0;
char *tmp = (char *)dest;
char *str;
while(*dest ++)
ilen ++;
str = (char*)malloc(ilen);
while(*tmp)
{
if ((*tmp > 'a') &&(*tmp < 'z'))
{
*str = *tmp + 'A' -'a';
}
else
{
*str = *tmp;
}
str++;
tmp++;
}
*str = '\0';
return str - ilen;
}
int main(int argc,char *argv[])
{
const char pszBuff[] = "Abcd";
char *cc;
cc = convert(pszBuff);
printf("%s",cc);
getchar();
}
那個str,被malloc了,是不是應該free 一下,我改成下面這樣,貌似不行,
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char * convert(const char *dest)
{
int ilen = 0;
char *tmp = (char *)dest;
char *str;
while(*dest ++)
ilen ++;
char *tt = (char*)malloc(ilen);
str = tt;
while(*tmp)
{
if ((*tmp > 'a') &&(*tmp < 'z'))
{
*str = *tmp + 'A' -'a';
}
else
{
*str = *tmp;
}
str++;
tmp++;
}
*str = '\0';
free(tt);
return str - ilen;
}
int main(int argc,char *argv[])
{
const char pszBuff[] = "Abcd";
char *cc;
cc = convert(pszBuff);
printf("%s",cc);
getchar();
}
應該怎么free str呢?
uj5u.com熱心網友回復:
你的寫法 如果 要 Free 只能是在 main 中 free ,一般來講
char * convert(const char *dest)
應該寫成
int convert( char *dest, const char *src);
讓 呼叫convert 函式的 地方 分配需要的空間, 這樣, 職責 就很明確了。
或者
char * convert(const char *dest)
從名字 來看 的意思是,修改 傳入的 字串,
那么 轉換 直接在 原字串中解決 就可以了
uj5u.com熱心網友回復:
除上以外,還有一點小問題:if ((*tmp > 'a') &&(*tmp < 'z')) 改成 if ((*tmp >= 'a') &&(*tmp<= 'z'))
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/125628.html
標籤:基礎類
上一篇:stc15f104w做的紅外接受程式走不通請查找問題
下一篇:c++
