求教大侠:如何输入一组字符串

求教大侠:怎么输入一组字符串?
各位大侠,小弟定义了一个char型指针数组,想用这个char型指针数组存一组字符串。可字符串输入总是出错:
求教大侠:如何输入一组字符串
代码如下:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include "string.h"

#define P printf
#define S scanf
#define G getch();
#define R return(0);

int main(void)
{
int i,n=6;
char* str[6];  //定义一个char型指针数组,用于存6个字符串,如6个国家的英文名字

P("Input 6 country names:\n");

for (i=0;i<n;i++)
S("%s",&str[i]);//输入6个国家名,如:Canada Australia China Italy Germany France
                    //悲剧!!!出错! 去掉& 也不行。

for (i=0;i<n;i++)
{
P("%s \n",str[i]);//输出刚输入的6个国家名
}

G
R
}


哪位大侠如果不嫌烦,干掉上面那个问题后,能否告诉小弟,有木有办法实现:不定义数组长度,为所欲为地想输入多少字符串就输入多少字符串?不胜感激!!!小弟技术弱,凡帮小弟的,小弟下次去庙里拜佛时一定会给你祈福!
------解决思路----------------------
都学c++的人了,还用c语言的东西。跳不出这种思维,下面的代码自己试一下。
#include <string>
#include<stdio.h>
#include<stdlib.h>
#include<iostream>
using namespace std;

int main(void)
{
int i,n=6;
string str[6];  //定义一个char型指针数组,用于存6个字符串,如6个国家的英文名字

cout<<"Input 6 country names:\n";

for (i=0;i<n;i++)
cin>>str[i];


for (i=0;i<n;i++)
{
cout<<"country name["<<i<<"] = "<<str[i]<<endl;
}
cin>>str[0];
return 0;
}


------解决思路----------------------
你这样的宏定义,我也是第一次见到。。
不过你的问题很简单:
char* str[6];
这里面有 这里定义了指针,但是没有为指针分配空间。
你写成char str[6][100];就好了
------解决思路----------------------
引用:
你这样的宏定义,我也是第一次见到。。
不过你的问题很简单:
char* str[6];
这里面有 这里定义了指针,但是没有为指针分配空间。
你写成char str[6][100];就好了

正解。求教大侠:如何输入一组字符串
------解决思路----------------------
//写出这样的代码只是说明你基础有问题。
2楼已经说出原因了,
char* str[6]; 你定义的是6个指针变量,你根本没有分配内存,可以说6个指针变量都是野指针;
 S("%s",&str[i]);//这句就是问题关键,str[i]只是占用一个指针变量的内存,现在不指向任何内存,你让str[i]用什么接受你输入的字符串。

------解决思路----------------------
/*************************************************************************
    > File Name: string_vector.cpp
    > Author: Jukay
    > Mail: hellojukay@gmail.com 
    > Created Time: 2014年10月30日 星期四 17时32分03秒
 ************************************************************************/

#include<iostream>
#include<string>
#include<vector>
using namespace std;

int main()
{
vector<string> v;
string s;
for(int i=0; i < 20; ++i)
{
cin >> s;
v.push_back(s);
}

for(auto a : v)
cout << a << '\n';

return 0;
}

不知道你学了C++ 没有啊
------解决思路----------------------
引用:
Quote: 引用:

你这样的宏定义,我也是第一次见到。。
不过你的问题很简单:
char* str[6];
这里面有 这里定义了指针,但是没有为指针分配空间。
你写成char str[6][100];就好了

正解。求教大侠:如何输入一组字符串
+1求教大侠:如何输入一组字符串
------解决思路----------------------
引用:
Quote: 引用:

都学c++的人了,还用c语言的东西。跳不出这种思维,下面的代码自己试一下。
#include <string>
#include<stdio.h>
#include<stdlib.h>
#include<iostream>
using namespace std;

int main(void)
{
int i,n=6;
string str[6];  //定义一个char型指针数组,用于存6个字符串,如6个国家的英文名字

cout<<"Input 6 country names:\n";

for (i=0;i<n;i++)
cin>>str[i];


for (i=0;i<n;i++)
{
cout<<"country name["<<i<<"] = "<<str[i]<<endl;
}
cin>>str[0];
return 0;
}
弱弱地问一句:最后那个 cin>>str[0]; 是什么作用?

呵呵,相当于getchar()
暂时停一下给你看下结果。
------解决思路----------------------
引用
不定义数组长度,为所欲为地想输入多少字符串就输入多少字符串?
内存和硬盘都是有限的,为所欲为, 想多了。 
------解决思路----------------------
引用:
如果你想实现,输入任意个数的字符串,则可以采用队列:
typedef struct Node
{
pNode next;
char str[100];
}Node,*pNode;
然后每添加一个字符串,就生成一个结点,为其动态的为分配堆空间。然后再把这个结点接到队尾。
你如果不太了解这个的话,建议还是看看数据结构相关的书,这是比较基础的用法。

不好意思,很久没用c了,这里结构体定义有错。
typedef struct Node
{
char str[100];
struct Node* next;
}Node,*pNode;
------解决思路----------------------
#include "iostream"
#include "string"
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
string str;
cin>>str;
cout<<str<<endl;
system("pause");
return 0;
}