c - strncmp/strcpy 损坏源

标签 c strcpy

今天我试图与 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/

相关文章:

c++ - 我想使用 strcpy_s 将字符串转换为 char,但它给出了大小错误

C - strcpy 的一般使用

c - 如何在 C 中创建 AT 命令解析器以获取来自 USART1 的传入字符串?

c - c中的json数组解析

c - 使用 strcpy 在我的代码中出现段错误

c - 此 C 程序中的段错误

c - 字符串长度对未初始化字符指针的影响

c - 以下就地反向功能有任何问题吗?

c - 如何在linux内核中将一个结构体存储在两个不同的内存页中?

c - 当我无法进入函数时这意味着什么? [C]