c - 如何使用指针从二维字符数组中创建一个句子
问题描述
我是 C 的新手,所以如果我不够清楚,请耐心等待。我有一个任务,我需要创建一个函数来获取平方字符矩阵并从中创建一个字符串。该函数最终应该返回一个指向字符串的指针,以便在 main 中我可以用它初始化一个字符串并在最后打印它。
(我也被限制在这个函数中只使用指针而不是常规数组语法)
例如矩阵是:
R O M E
G O A L
H E A D
D E A D
我想做一个这样的句子:"ROME GOAL HEAD DEAD"
。
我试图制作一个仅在矩阵行上运行的 for 循环,这样我就可以在我使用的第一行strcpy()
和另一行中将每一行复制到我之前已经准备好的字符串(其中有足够的空间) strcat()
。
没啥事儿。
对不起我的英语,谢谢。
char * makeString(char *smallMat, int rows, char *pStr ) {
int i;
char sentence[(rows * rows) + rows + rows];
pStr = &sentence;
for (i = 0; i < rows; ++i) {
if (i == 0) {
strcpy(sentence, *(smallMat + i));
}
else{
strcat(sentence, ' ' + *(smallMat + i));
}
}
return pStr;
}
解决方案
正如@anonmess 指出的那样,您不能将strcpy()
etc. 用于非 0 终止字符序列。正如您自己所说,任务是使用指针。如果您使用过strcpy()
(并且如果有效),您将解决该作业;)
这是一个不使用的完整解决方案pStr
。
#include <stdio.h> // printf()
#include <stdlib.h> // malloc()
static char smallMat[4][4] = {
{ 'R', 'O', 'M', 'E' },
{ 'G', 'O', 'A', 'L' },
{ 'H', 'E', 'A', 'D' },
{ 'D', 'E', 'A', 'D' }
};
char* makeString(char* smallMat, int rows) {
int currentRow, currentColumn;
/* space for all characters (rows * rows)
* + one character for each space + terminating '\0'. */
char* sentence = malloc((rows * rows) + rows);
char* p = sentence;
for (currentRow = 0; currentRow < rows; ++currentRow) {
for (currentColumn = 0; currentColumn < rows; ++currentColumn) {
*p++ = *(smallMat + (currentRow * rows) + currentColumn);
}
*p++ = ' ';
}
*--p = '\0'; /* replace the last space with terminating 0,
* so it can be printed. */
return sentence;
}
int main() {
char* output = makeString(smallMat, 4);
printf(output);
free(output);
return 0;
}
推荐阅读
- python - 如何安全地修补 matplotlib 的轴(不影响将来的调用)?
- python-3.x - 根据值和某些条件组合字典键
- json - 在打开的浏览器上打开反应开发服务器
- java - “new TextToSpeech.OnInitListener()”颜色不亮,表示没有使用,如何使其可用?
- r - 如何将简单的分析日志添加到 R Shiny 应用程序?
- json - 原谅 Swift 中的类型解码
- imagej - 如何循环遍历多点选择的每个点以获取像素值?
- arrays - Visual Studio 2019 中的 C 语言
- sass - Tailwind + SASS 未在 Codepen 中呈现样式
- android - 在多模块(库)中,尝试导入时,Android Studio 给出错误:“添加库:'Gradle com.package.name:4.xx @aar' to Classpath