2012-11-16 335 views
1

用于动态内存中数组的工作程序。 需要等同于C.任何人都可以帮忙吗?C++相当于C

const int n = 6; 
char **words = (char**) malloc(n *sizeof(char*)); 
for(int i = 0 ; i < n; i++) 
    words[i] = (char*)malloc(50 * sizeof(int)); 

for(int i = 0; i < n; i++) 
{ 
    cin>>words[i]; 
} 

cout<<endl; 
for(int i = 0; i < n; i++) 
{ 
    if(words[i][0] == 'q') 
     cout<<words[i]<<endl; 
} 
+2

这看起来像C&C++的混合物。你想删除C++,并只有在C? – Matt

+4

如果是这样的话,cin&cout是唯一需要改变的位。 – Matt

+0

是的,只有C代码。 –

回答

6

唯一的C++部分有cincout;你可以很容易地改变他们:

cin>>words[i]; 

成为

scanf("%s", words[i]); 

gets(words[i]); 

cout<<words[i]<<endl; 

成为

puts(words[i]); 

顺便说一句,在cin/scanf/gets你有一个潜在的缓冲区溢出,因为你为6个字符分配空间,但你接受任何长度的输入。你应该这样做,而不是:

scanf("%6s", words[i]); 

或(更容易维护,因为它直接使用n

fgets(words[i], n, stdin); 

(尽管这将在字符串中包含尾随\n

+0

谢谢!所有工作都正常。 –

2

您使用的唯一C++功能是cin和cout。将cin>>words[i]替换为gets(words[i]),将cout<<words[i]<<endl替换为puts(words[i])

1

使用scanf("%s", &words[i])来输入数据stdin和printf("%s\n", words[i])输出到标准输出。

+0

使用小数转换规范可能不会导致他想要的代码。 –

+0

对不起,忘记了是字符串:P –

0

如你所愿:

const int n = 6; 
    char **words = (char**) malloc(n *sizeof(char*)); 

    int i = 0; 

    for(i= 0 ; i < n; i++) 
    { 
     words[i] = (char*)malloc(50 * sizeof(char)); 
    } 

    for(i = 0; i < n; i++) 
    { 
     scanf("%s", words[i]); 
    } 

    printf("\n"); 

    for(i = 0; i < n; i++) 
    { 
     if(words[i][0] == 'q') 
      printf("%s\n", words[i]); 

    }