gpt4 book ai didi

c - strncmp/strcpy 损坏源

转载 作者:太空宇宙 更新时间:2023-11-04 00:55:11 25 4
gpt4 key购买 nike

今天我试图与 char * string 友好相处......但我似乎失败了 :)每次我调用 strcmp/strncmp/strcpy 函数时,我的源代码都会损坏...

这是片段

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

struct student
{
int UID;
char name[20];
char surname[20];
};

char * getString(int minChars, int maxChars);

struct student * myStud;

int main(int argc, char** argv) {

myStud = (struct student*)malloc(sizeof(struct student));
while(1)
{
printf("\nEnter new name: ");
strcpy(myStud->name,getString(1,19));
printf("\n The values is now %s",myStud->name);
}
return (EXIT_SUCCESS);
}

char * getString(int minChars, int maxChars)
{

char string[maxChars+1];
scanAgain:
scanf("%s",&string);
if(strlen(string)<minChars)
{
printf("\nToo few symbols, try again: ");
goto scanAgain;
}
if(strlen(string)>maxChars)
{
printf("\nToo many symbols, try again: ");
goto scanAgain;
}
string[maxChars]='\0';
return(string);
}

输出:

Enter new name: Alekasdasd

The values is now Alekasda�#
Enter new name:

我只是一个初学者,所以它可能非常简单......可能不是。哦,顺便说一下,使用 linux 和 netbeans 作为 SDK,gcc 作为编译器。

最佳答案

您正在返回一个指向堆栈变量的指针。

char * getString(int minChars, int maxChars)
{

char string[maxChars+1];

当 getString 返回时,string 无效。您的返回值指向这个无效的字符串。

使用:

char * getString(int minChars, int maxChars, char * string) {

return string;
}
...
char string[100];
getString(1, 2, string);

还有,goto?请停止 - 使用 forwhile dodo while 但不要使用 goto

关于c - strncmp/strcpy 损坏源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5286314/

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