C 反转字符串的strinverse函数出错
我编写了以下函数来反转字符串C 反转字符串的strinverse函数出错,c,C,我编写了以下函数来反转字符串s char *strinverse( const char *s ){ char *t; int i = 0; while (*s) { s++; i++; } while (i >= 0){ s--; *t = *s; t++; i--; } *t = '\0'; return t; } int m
s
char *strinverse( const char *s ){
char *t;
int i = 0;
while (*s) {
s++;
i++;
}
while (i >= 0){
s--;
*t = *s;
t++;
i--;
}
*t = '\0';
return t;
}
int main(void){
char v[4]="abc";
char r[4];
char *pr = r;
pr = strinverse(v);
printf("%s", pr);
return 0;
}
其思想是在第一个while循环中找出字符串s
的长度,然后在将相应的值复制到t
时减少s
的指针。由于某种原因,程序崩溃了,编译器没有给我任何信息。也许主函数有问题?谢谢你的建议 答案已编辑
#include<stdio.h>
#include<stdlib.h>
char *strinverse(const char *s ){
char *t, *p;
int i = 0;
while (*s) {
s++;
i++;
}
t = (char*)malloc((i + 1) * sizeof(char)); //added this!
p = t;
while (i >= 0){
s--;
*t = *s;
t++;
i--;
}
*t = '\0';
return p;
}
int main(void){
char v[4]="abc";
char *pr;
pr = strinverse(v);
printf("%s\n", pr);
return 0;
}
#包括
#包括
字符*strinverse(常量字符*s){
字符*t,*p;
int i=0;
而(*s){
s++;
i++;
}
t=(char*)malloc((i+1)*sizeof(char));//添加了这个!
p=t;
而(i>=0){
s--;
*t=*s;
t++;
我--;
}
*t='\0';
返回p;
}
内部主(空){
char v[4]=“abc”;
char*pr;
pr=反向(v);
printf(“%s\n”,pr);
返回0;
}
答案已编辑
#include<stdio.h>
#include<stdlib.h>
char *strinverse(const char *s ){
char *t, *p;
int i = 0;
while (*s) {
s++;
i++;
}
t = (char*)malloc((i + 1) * sizeof(char)); //added this!
p = t;
while (i >= 0){
s--;
*t = *s;
t++;
i--;
}
*t = '\0';
return p;
}
int main(void){
char v[4]="abc";
char *pr;
pr = strinverse(v);
printf("%s\n", pr);
return 0;
}
#包括
#包括
字符*strinverse(常量字符*s){
字符*t,*p;
int i=0;
而(*s){
s++;
i++;
}
t=(char*)malloc((i+1)*sizeof(char));//添加了这个!
p=t;
而(i>=0){
s--;
*t=*s;
t++;
我--;
}
*t='\0';
返回p;
}
内部主(空){
char v[4]=“abc”;
char*pr;
pr=反向(v);
printf(“%s\n”,pr);
返回0;
}
答案已编辑
#include<stdio.h>
#include<stdlib.h>
char *strinverse(const char *s ){
char *t, *p;
int i = 0;
while (*s) {
s++;
i++;
}
t = (char*)malloc((i + 1) * sizeof(char)); //added this!
p = t;
while (i >= 0){
s--;
*t = *s;
t++;
i--;
}
*t = '\0';
return p;
}
int main(void){
char v[4]="abc";
char *pr;
pr = strinverse(v);
printf("%s\n", pr);
return 0;
}
#包括
#包括
字符*strinverse(常量字符*s){
字符*t,*p;
int i=0;
而(*s){
s++;
i++;
}
t=(char*)malloc((i+1)*sizeof(char));//添加了这个!
p=t;
而(i>=0){
s--;
*t=*s;
t++;
我--;
}
*t='\0';
返回p;
}
内部主(空){
char v[4]=“abc”;
char*pr;
pr=反向(v);
printf(“%s\n”,pr);
返回0;
}
答案已编辑
#include<stdio.h>
#include<stdlib.h>
char *strinverse(const char *s ){
char *t, *p;
int i = 0;
while (*s) {
s++;
i++;
}
t = (char*)malloc((i + 1) * sizeof(char)); //added this!
p = t;
while (i >= 0){
s--;
*t = *s;
t++;
i--;
}
*t = '\0';
return p;
}
int main(void){
char v[4]="abc";
char *pr;
pr = strinverse(v);
printf("%s\n", pr);
return 0;
}
#包括
#包括
字符*strinverse(常量字符*s){
字符*t,*p;
int i=0;
而(*s){
s++;
i++;
}
t=(char*)malloc((i+1)*sizeof(char));//添加了这个!
p=t;
而(i>=0){
s--;
*t=*s;
t++;
我--;
}
*t='\0';
返回p;
}
内部主(空){
char v[4]=“abc”;
char*pr;
pr=反向(v);
printf(“%s\n”,pr);
返回0;
}
程序崩溃的原因是您没有为指针t
分配空间。在这种情况下,程序调用未定义的行为。为t
t = malloc(i + 1);
不要忘记在最后使用
free(t)
释放内存程序崩溃的原因是您没有为指针t
分配空间。在这种情况下,程序调用未定义的行为。为t
t = malloc(i + 1);
不要忘记在最后使用
free(t)
释放内存程序崩溃的原因是您没有为指针t
分配空间。在这种情况下,程序调用未定义的行为。为t
t = malloc(i + 1);
不要忘记在最后使用
free(t)
释放内存程序崩溃的原因是您没有为指针t
分配空间。在这种情况下,程序调用未定义的行为。为t
t = malloc(i + 1);
不要忘了在最后使用
free(t)
释放内存您没有在指针“t”中生成malloc,这一行有问题“*t=*s;”您没有在指针“t”中生成malloc,这一行有问题“*t=*s;”您没有在指针“t”中生成malloc,这一行有问题“*t=*s;“您没有在指针“t”中生成malloc,并且在这行“*t=*s;“我将使用一个函数来更改字符串
void reversestr(char *s)
{
char tmp;
size_t i, len = strlen(s);
for (i = 0; i < len / 2; i++) {
tmp = s[i];
s[i] = s[len - 1 - i];
s[len - 1 - i] = tmp;
}
s[len] = '\0';
}
void reversestr(字符*s)
{
char-tmp;
尺寸i,len=strlen(s);
对于(i=0;i
如果您需要单独使用反向字符串,您可以在调用
reversestr
之前使用strdup
。顺便说一句:以“str”开头的函数名是为C标准库的函数保留的。我将使用一个就地更改字符串的函数
void reversestr(char *s)
{
char tmp;
size_t i, len = strlen(s);
for (i = 0; i < len / 2; i++) {
tmp = s[i];
s[i] = s[len - 1 - i];
s[len - 1 - i] = tmp;
}
s[len] = '\0';
}
void reversestr(字符*s)
{
char-tmp;
尺寸i,len=strlen(s);
对于(i=0;i
如果您需要单独使用反向字符串,您可以在调用
reversestr
之前使用strdup
。顺便说一句:以“str”开头的函数名是为C标准库的函数保留的。我将使用一个就地更改字符串的函数
void reversestr(char *s)
{
char tmp;
size_t i, len = strlen(s);
for (i = 0; i < len / 2; i++) {
tmp = s[i];
s[i] = s[len - 1 - i];
s[len - 1 - i] = tmp;
}
s[len] = '\0';
}
void reversestr(字符*s)
{
char-tmp;
尺寸i,len=strlen(s);
对于(i=0;i
如果您需要单独使用反向字符串,您可以在调用
reversestr
之前使用strdup
。顺便说一句:以“str”开头的函数名是为C标准库的函数保留的。我将使用一个就地更改字符串的函数
void reversestr(char *s)
{
char tmp;
size_t i, len = strlen(s);
for (i = 0; i < len / 2; i++) {
tmp = s[i];
s[i] = s[len - 1 - i];
s[len - 1 - i] = tmp;
}
s[len] = '\0';
}
void reversestr(字符*s)
{
char-tmp;
尺寸i,len=strlen(s);
对于(i=0;i
如果需要单独使用反向字符串,可以在调用
reversestr
之前使用strdup
。顺便说一句:以“str”开头的函数名“是为C标准库的函数保留的。您尚未为新字符串分配任何空间char*t
没有任何内存空间!您尚未为n分配任何空间