【发布时间】:2014-01-19 10:51:20
【问题描述】:
我需要从用户那里读取一些文本,然后打印出相同的文本," 在开头," 在字符串结尾。我用getline 读了一整行(也有空格)。
示例(我应该得到什么):
用户写道:hello
我需要打印:"hello"
示例(我得到了什么):
用户写道:hello
我的应用打印:"hello
"
我的代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void fun(int times)
{
int i = 0, j = 255;
char *str = malloc(sizeof(char) * j);
char *mod = malloc(sizeof(char) * j);
for(i=0; i<j; i++)
mod[i] = 0;
i = 0;
while(i<times)
{
printf("\n> ");
getline(&str, &j, stdin);
strcpy(mod, "\"");
strcat(mod, str);
strcat(mod, "\"");
printf("%s\n", mod);
i ++;
}
free(mod);
mod = NULL;
free(str);
str = NULL;
}
int main(int argc, char **argv)
{
fun(4);
return 0;
}
已解决:
哈,这很容易..但是可以更轻松地完成吗?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void fun(int times)
{
int i = 0, j = 255;
char *str = malloc(sizeof(char) * j);
char *mod = malloc(sizeof(char) * j);
for(i=0; i<j; i++)
mod[i] = 0;
i = 0;
while(i<times)
{
printf("\n> ");
getline(&str, &j, stdin);
int s = strlen(str);
strcpy(mod, "\"");
strcat(mod, str);
mod[s] = 0;
strcat(mod, "\"");
printf("%s\n", mod);
i ++;
}
free(mod);
mod = NULL;
free(str);
str = NULL;
}
int main(int argc, char **argv)
{
fun(4);
return 0;
}
【问题讨论】:
-
更简单:
getline(&(str+1), &j, stdin)。还要为您的mod字符串松开“初始化为零”——事实上,您根本不需要mod。