在将内存分配给" namn"后,程序停止运行。为什么呢?
目标是输入两个SEPARATE字符串并连接它们,然后打印。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char namn, fornamn[25], efternamn[25];
scanf("%s", fornamn);
scanf("%s", efternamn);
namn = malloc((strlen(fornamn)+strlen(efternamn)+1)*sizeof(char));
strcpy(namn, fornamn);
strcat(namn, efternamn);
printf("%s", namn);
return 0;
}
答案 0 :(得分:2)
由于namn
的类型为char
,因此malloc
的返回值将被截断为char的大小,这不足以存储有效的指针值。
修复是:
char *namn;
编译时,您的编译器可能会发出很多警告。阅读它们总是很有趣。示例gcc
(不含选项:默认警告设置):
L:\>gcc test.c
test.c: In function 'main':
test.c:11:6: warning: assignment makes integer from pointer without a cast [-Wint-conversion]
namn = malloc((strlen(fornamn)+strlen(efternamn)+1)*sizeof(char));
^
除此之外,您可以通过以下方式限制用户输入并避免缓冲区溢出:
scanf("%24s", fornamn);
scanf("%24s", efternamn);
并且sizeof(char)
始终为1.因此在分配字符串内存时无需指定它。
答案 1 :(得分:0)
变量namn是一个简单的char。 Malloc返回指向内存的指针。因此,您需要一个char指针(char * namn)。