用C语言实现一个revert函数,它的功能是将输入的字符串在原串上倒序后返回.
#include <string.h>
void reverse(char s[])
{
int length = strlen(s) ;
int c, i, j;
for (i = 0, j = length - 1; i < j; i++, j--)
{
c = s[i];
s[i] = s[j];
s[j] = c;
}
}
问题1:Shouldn't variable "c" be a char instead of an int?
回答1:In C, whenever a character constant or variable is used in an expression in C, it is automatically converted & treated as an integer. If you have a linux termminal, you can see the ascii codes by typing man ascii.
注意:Its important to note in this example that the string s
must be declared in an array form. In other words, char s[] = "this is ok"
rather than char *s="cannot do this"
because the latter results in a string constant which cannot be modified.
-----------------------------------------------------------------------------------------
Notice:
What is the difference between char s[] and char *s in C?
In C, I can do like this:
char s[]="hello";
or
char *s ="hello";
So I wonder what is the difference? I want to know what actually happens in memory allocation during compile time and run time.
Answer:
The difference here is that
char *s = "Hello world";
will place Hello world in the read-only parts of the memory and making s a pointer to that, making any writing operation on this memory illegal. While doing:
char s[] = "Hello world";
puts the literal string in read-only memory and copies the string to newly allocated memory on the stack. Thus making
s[0] = 'J';
legal.