猿问

为什么字符串没了?没找到原因,可能思维定式了,先去玩玩。visual studio2015不会调试只懂点gdb。

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
#include <stdbool.h>

#define CAP_INCR 5
#define MAX 100

int main(void)
{
	bool sorted = true;
	unsigned j = 0;
	char more = '\0';
	char* ptr = NULL;
	char buffer[MAX] = "";
	unsigned count = 0;						//count how many yanyu inputed
	unsigned init = 5;
	char* ptemp = NULL;
	char** pTemp = NULL;
	char** slangs = calloc(init,sizeof(char*));
	
	//Let us get the input
	for (;;)
	{
		printf("Input a piece of slang.\n-->:");
		ptr = fgets(buffer, MAX, stdin);
		
		*(slangs + 1) = ptr;  (这里的一原本是  count++  ,现在是测试问题的)

		if (*ptr == '\n')break;
		
		//If the memory is small
		if ((count - 1) == init)   //the memory isn't enough
		{
			init += CAP_INCR;
			pTemp = realloc(slangs, init*sizeof(slangs));
			if (!pTemp)  //if failed!
			{
				printf_s("Error !!!\n");
				free(slangs);
				slangs = NULL;
				exit(1);
			}
			slangs = pTemp;
			pTemp = NULL;
		}
		printf("%s",*(slangs+1));(这里可以显示)
		
	}
	printf("%s",*(slangs+1));  (是为测试用的)  (没显示任何东西)
	
	/*//Now let's sort it   (这里用冒泡排序)
	while (!sorted)
	{
		sorted = true;
		for (size_t i = 0; i < count -1; i++)
		{
			if (strnlen_s(slangs[i], MAX) < strnlen_s(slangs[i + 1], MAX))
			{
				sorted = false;
				ptemp = slangs[i];
				slangs[i] = slangs[i+1];
				slangs[i + 1] = ptemp;
			}
		}
	}

	//Output them 
	for (size_t i = 0; i < count; ++i)
	{
		printf_s("\n%s\n",slangs[i]);
	}*/

	free(slangs);
	slangs = NULL;
	

	return 0;
}


(在windows 7上的运行结果,用的是visual studio 2015 community)

Input a piece of slang.
-->:这是运行结果
这是运行结果
Input a piece of slang.
-->:第一个能显示出来
第一个能显示出来
Input a piece of slang.
-->:第二个就不行了
第二个就不行了
Input a piece of slang.
-->:当然换成 let alone :   count++
当然换成 let alone :   count++
Input a piece of slang.
-->:希望各位指教!!!!
希望各位指教!!!!
Input a piece of slang.
-->:感谢各位
感谢各位
Input a piece of slang.
-->:

请按任意键继续. . .


AIxer
浏览 1326回答 1
1回答

onemoo

目前的代码中count并没有用于计数。不过我测试时可以正常显示输入的所有短语,我没有遇到你说的“第二个就不行了”的情况
随时随地看视频慕课网APP
我要回答