我只是浏览一些面试问题,发现这段代码使用指针反转字符串。但是我看到他们在这里定义了char字符串[100]来限制字符串长度。我不是很擅长C.如何修改它以使其成为任何长度的字符串?
#include<stdio.h>
int string_length(char*);
void reverse(char*);
main()
{
char string[100];
printf("Enter a string\n");
gets(string);
reverse(string);
printf("Reverse of entered string is \"%s\".\n", string);
return 0;
}
void reverse(char *string)
{
int length, c;
char *begin, *end, temp;
length = string_length(string);
begin = string;
end = string;
for ( c = 0 ; c < ( length - 1 ) ; c++ )
end++;
for ( c = 0 ; c < length/2 ; c++ )
{
temp = *end;
*end = *begin;
*begin = temp;
begin++;
end--;
}
}
int string_length(char *pointer)
{
int c = 0;
while( *(pointer+c) != '\0' )
c++;
return c;
}
答案 0 :(得分:1)
而不是静态数组使用动态内存分配:char *tab = malloc(n * sizeof(char))
其中n
是表示所需长度的变量。
答案 1 :(得分:1)
如果您希望用户在运行时决定/输入大小,可以使用malloc()。
答案 2 :(得分:0)
动态内存分配是解决方案.. 获取指向字符串的指针并动态分配内存..这在运行时分配.. 这将解决您的问题..
char *str;
str = (char*)malloc(n *sizeof(char));
注意:类型转换在C中是可选的,'n'在这里是所需的长度。(可以是用户输入)。