【发布时间】:2017-11-23 13:24:49
【问题描述】:
我遇到了一个与从 c 中的字符串打印一个字符有关的问题。 该函数从用户那里获取两个变量 - 数字(应该从字符串中打印字符的数字)和字符串。当我输入字符串“Martin”并且数字为 5 时,输出为“i”。但是当数字大于字符串长度时,就会出现问题,我实际上不知道出了什么问题。
附言。如果数字长于字符串大小,则应打印“Nothing”。
void printLetter() {
char * string = (char*)malloc(sizeof(char));
int n;
printf("Number:\n");
scanf("%i", &n);
printf("String:\n");
scanf("%s", string);
if(n > strlen(string)) {
printf("nothing");
} else {
printf("%c\n", string[n+1]);
}
free(string);
}
【问题讨论】:
-
char * string = malloc(sizeof(char));您正在为单个char分配空间 - 因此,如果您尝试编写更多内容(在scanf("%s", string);中),您已经得到 未定义的行为 -
所以我应该这样分配它:
char * string = malloc(100* sizeof(char));? -
@UnholySheep
scanf("%0s", string);或scanf("%*s", string);如果首先调用string[0]='\0';会很安全 :) -
是的,您需要分配更多 - 100 应该足够了。另请注意,在此特定代码中,您实际上不需要使用
malloc和free,您可以只声明一个char数组(例如:char string[100];) -
string[n+1]-->string[n-1]...您也只为字符串变量分配了 1 个字节。
标签: c arrays string memory-management io