如何解决在有和没有动态内存的情况下反转字符串
int length(char *);
char* reverse(char *);
int main()
{
int a;
char p;
a=length("Computer");
printf("%d",a);
printf("\nReverse : %s",reverse("Computer"));
getch();
return 0;
}
int length(char *p)
{
int i;
for(i=0;*(p+i)!='\0'; i++);
return(i);
}
char* reverse(char *p)
{
int len,i;
char temp;
for(len=0; *(p+len)!='\0'; len++);
for(i=0; i<len/2; i++)
{
temp=*(p+i);
*(p+i)=*(p+len-1-i);
*(p+len-1-i)=temp;
}
return(p);
}
我试图打印不使用strlen()函数输入的字符串的长度,并且还尝试使用指针和函数创建用户定义的函数来反转字符串,而不使用strrev()函数。编译后,该程序不会引发错误,但不会显示任何内容。长度已正确打印,但背面未打印,我不知道为什么?帮助我在这里的人。
解决方法
首先,正如user3121023所说,不能修改字符串常量(或文字)。
问题出在索引,指针,最后是反转字符串的代码。我会在某些方面进行调整,然后将您附在这里:
#include <stdio.h>
#include <stdlib.h>
int length(char *);
char * reverseWithDynamicMemory(char *,int);
char * reverseWithoutDynamicMemory(char *,int,char *);
int main() {
char *pWord = "Computer";
int wordLength = length(pWord);
char reverseWordWithouDynamicMemory[wordLength];
printf("Word Lenght: %d\n",wordLength);
printf("\nReverse with Dynamic Memory: %s\n",reverseWithDynamicMemory(pWord,wordLength));
printf("Reverse without Dynamic Memory: %s\n\n",reverseWithoutDynamicMemory(pWord,wordLength,reverseWordWithouDynamicMemory));
return 0;
}
int length(char *pWord) {
int i;
for (i = 0; *(pWord + i) != '\0'; i++);
return i;
}
char * reverseWithDynamicMemory(char *pWord,int length) {
int i = 0,end = length - 1;
char *reverseWord = (char *) malloc(sizeof(char) * length);
if(!reverseWord) {
printf("\nError allocating memory for reverseWord...\n");
exit(EXIT_FAILURE);
}
while (i < end || end >= 0) {
reverseWord[i] = pWord[end];
end--;
i++;
}
reverseWord[length] = '\0';
return reverseWord;
}
char * reverseWithoutDynamicMemory(char *pWord,int length,char *reverseWord) {
int i = 0,end = length - 1;
while (i < end || end >= 0) {
reverseWord[i] = pWord[end];
end--;
i++;
}
reverseWord[length] = '\0';
return reverseWord;
}
一些有用的提示:
- 有一个隐式声明'getch',在C99中无效
- 未使用的变量'p'
- 使用更多描述性名称
- 我在函数reverse中创建了一个带有动态内存的变量。否则,将返回与局部变量“ reverseWord”关联的堆栈存储器的地址。
最好的问候, 丹尼
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。