gpt4 book ai didi

c - 使用变量定义字符串大小在 C 的 for 循环中无法正常工作

转载 作者:行者123 更新时间:2023-11-30 14:47:07 24 4
gpt4 key购买 nike

我正在尝试反转用户输入的字符串,这里的问题出在函数*rev中,当我使用size = strlen(STR);来获取字符串的长度并将其传递给 revS[size] 的大小,程序会输出一些反向字符串的垃圾值!如果我传递一些值而不是 revS[10] 中的 if size 并运行程序,它会按预期工作。我已检查 size 的值为

printf("\nlength of string is: %d\n",size);

它给出了正确的值。我不明白哪里出了问题!

#include<stdio.h>
#include<string.h>

char *rev(char *);

int main()
{
char string[100];
printf("Enter the string to reverse: ");
scanf("%s", string);
printf("You entered string : %s\n Reversed string is: %s", string, rev(string));
}


char *rev(char *STR)
{
int size, i, j = 0;
size = strlen(STR);
printf("\nlength of string is: %d\n", size);
char revS[size];

for(i = size-1; i >= 0; i--)
{
revS[j] = STR[i];
j = j + 1;
}

revS[j] = '\0';
return (revS);
}

输出:

Enter the string to reverse: mahaveer

length of string is: 8
You entered string : mahaveer
Reversed string is: ╚²b
--------------------------------
Process exited after 28.7 seconds with return value 0
Press any key to continue . . .

最佳答案

问题是您的反向字符串是在堆栈上而不是堆上分配的。当您的 rev 函数返回时,该范围内的所有变量都将被垃圾收集。您可以使用malloc()在堆上动态分配内存。请注意,调用者负责对字符串调用 free() 以避免内存泄漏。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char *rev(char *);

int main() {
char string[100];
printf("Enter the string to reverse: ");
scanf("%s", string);
char *r = rev(string);
printf("You entered string: %s\nReversed string is: %s\n", string, r);
free(r);
}

char *rev(char *str) {
int i, j;
int size = strlen(str);
char *rev = malloc(sizeof(*rev) * (size + 1));

for (i = size - 1, j = 0; i >= 0; i--, j++) {
rev[j] = str[i];
}

rev[size] = '\0';
return rev;
}

请注意,此代码容易发生缓冲区溢出。

关于c - 使用变量定义字符串大小在 C 的 for 循环中无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51583832/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com