gpt4 book ai didi

c - 在C中打印出一个字符串

转载 作者:太空宇宙 更新时间:2023-11-04 01:14:33 24 4
gpt4 key购买 nike

我处于 C 编程语言的初级水平。我试图打印出一个字符串,它的指针从一个函数传递到 main() 函数中的另一个指针变量。我在 C 方面的知识非常有限,我在网上查过(可能我看得不够深入,但请帮忙)这是代码:

int i;
char *result;
result= center_string("I go to school everyday\nto study");

i=0;
while (result[i]!='\0'){
printf("%c\n", result[i]);
i++;
}

我收到的结果是垂直排列的 4 个奇怪的字符(不幸的是 stackoverflow.com 不允许我发布图片)

请帮忙!提前致谢

-- 添加---这是 center_string 的代码:

static char* center_string(char* msg){
char toReturn[34]; // the return message has to contain two lines in one. It might be better to form this string while traversing two strings, rather than forming by the union of two lines
char centerString[34];

// padding can be done during the process of splitting two lines or after.
// it's harder to do while splitting two lines because the length of each line is unknown
// countSecond starts with -1 because it contains \n which should not be in it. So this number will be discarded
int paddingFirst = 0, paddingSecond = 0, countFirst = 0, countSecond = -1, countReturn = 0; // maximum number of return string is 34

// stillOnTheFirstLine is a boolean variable but representing by a integer with 1 digit
int i = 0, stillOnTheFirstLine = 0; // start counting the character in the second line

//initialize the return line
for (i=0; i<34; i++){
toReturn[i] = '\0';
centerString[i] = '\0';
// printf("initializing toReturn[%i] with value %c\n",i, toReturn[i]);
}

i = 0;

while ( msg[i]!='\0' ) {
// getting the first line to display
// the limit is 16 chars or \n to the second line
// i.e: I go to school e|very day\nto study
// firstLine = "I go to school e"
// secondLine ="to study"
// discarded = "very day"
// get the first line
if (i<=15 && msg[i]!='\n'){
// this is the first line
// insert the character into the return string
toReturn[countReturn] = msg[i];
//printf("First line: %c\n", toReturn[countReturn]);
countReturn++;
countFirst++;
}else{
// when the first line is finished
// there are two cases
// first case: when the first line is longer than 16 character long
if (msg[i]!='\n' && i>15 && stillOnTheFirstLine==0){
// discard the character
//printf("Discard: %c\n", msg[i]);
}else{
stillOnTheFirstLine = 1; // yes the parser is still on the second line
// this is the second case which the first line is finished
// check for 16 character instead of 15 because one of them is \n which separate line 1 and 2
if (countReturn<33 && stillOnTheFirstLine==1){
toReturn[countReturn] = msg[i]; // put the character from the msg string to the toReturn
//printf("Second line: %c\n", toReturn[countReturn]);
countReturn++;
countSecond++;
}
// whatever after this is discarded
}
}
i++;
}

// start padding
paddingFirst = floor((double)(16-countFirst)/2);
paddingSecond = floor((double)(16-countSecond)/2);

// padding the first line
i=0;
while (toReturn[i]!='\0' && toReturn[i]!='\n'){
centerString[paddingFirst] = toReturn[i];
paddingFirst++;
i++;
}

// add '\n' into the centerString
centerString[paddingFirst] = toReturn[i];
// then continue with the next character in toReturn
i++;

// padding the second line
paddingSecond = i+paddingSecond;
while(toReturn[i]!='\0'){
centerString[paddingSecond] = toReturn[i];
paddingSecond++;
i++;
}


/*for(i=0; i<34; i++){
printf("the result string is: %c\n", centerString[i]);
}*/
return centerString;

最佳答案

为什么你不能只执行 printf("%s\n", result)

关于c - 在C中打印出一个字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4776274/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com