今天我试图与 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
?请停止 - 使用 for
、while do
、do while
但不要使用 goto
关于c - strncmp/strcpy 损坏源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5286314/