【发布时间】:2023-04-05 23:19:01
【问题描述】:
请看下面的代码。用户应输入一个句子,代码应返回该句子的首字母缩写词。
但是,当我分配 *str 并将 N 定义为 1 时。
“三个字母缩写”>>应该是>>“t”
实时,“三个字母缩写”>>是>>“tla”
这没有意义。 请解释为什么会发生这种情况。
#include <stdio.h>
#include <stdlib.h>
#define N 1
#define M 35
char *acronyms (char *st, char *sentence);
int main()
{
char *str=(char*)(malloc(N*sizeof(char)));
char *sen=(char*)(malloc(M*sizeof(char)));
printf("enter... ");
gets(sen);
puts(acronyms(str, sen));
free(str);
free(sen);
return 0;
}
char *acronyms (char *st, char *sentence)
{
char *p = st;
char *q = sentence;
if (*q !=' ') {
*p =*q;
p++;
}
while (*(q+1)) {
if (*q==' ' && *(q+1)!= ' ') {
*p = *(q+1);
p++;
}
q++;
}
*p='\0';
return st;
}
【问题讨论】:
-
你有更好的输入/输出样本吗?
-
当你
malloc()时不要忘记'\0'。如果您需要一个字符串的空间,则必须分配 2 个字节。并且永远不要使用gets(),而是使用fgets() -
请将您的纯文本显示为文本而不是图形。
-
char *str=(char*)(malloc(N*sizeof(char)));只分配一个字节。所以唯一可以存储在那里的字符串是空字符串。这可能不是你想要的。
标签: c