#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define size 256
int main() {
int partsize, len = 0;
int j, k, n, i = 0;
char* str1 = (char*)malloc(sizeof(char) * size);
// char *str2=(char*)malloc(sizeof(char)*size);
// int *count=(int*)calloc(size,sizeof(int));
scanf("%[^\n]%*c", str1);
scanf("%d", &n);
// scanf("%[^\n]%*c",str2);
// printf("%s %s",str1,str2);
char* temp = (char*)malloc(sizeof(char) * size);
char** p = (char**)calloc(n, sizeof(char*));
len = strlen(str1);
if (len % n != 0) {
printf("Sorry");
} else {
k = 0;
p = temp;
partsize = len / n;
for (j = 0; j < len; j++) {
*(temp + k) = str1[j];
if ((j + 1) % partsize == 0) {
*(temp + k) = "\n";
p++;
p = temp + k + 1;
}
}
for (i = 0; i < n; i++) {
printf("%s", *(*(p + i)));
}
}
return 0;
}
我想将字符串分成 n 个相等的部分。但是当我运行此代码时,我没有得到任何输出。我认为问题出在指向字符的指针数组的指针上。请帮忙。
最佳答案
下面是一个示例,说明如何以更简单的方式动态分配所有需要的内存。这允许您处理任何长度的字符串。另外,请注意 getline
的使用。它提供了返回读取的字符串长度(包括空终止字符)的优点。内嵌注释进行了解释。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
size_t partsize = 0;
size_t end = 0;
ssize_t read = 0;
ssize_t len = 0;
int i = 0;
int n = 0;
char *ptr = NULL;
char *str1 = NULL;
printf ("\n Please enter a string (of n parts) : ");
if ((read = getline (&str1, &end, stdin)) == -1) {
fprintf (stderr, "\nError: str1 returned no characters.\n\n");
return 1;
}
printf (" Enter the number of parts for string : ");
scanf("%d", &n);
printf ("\n");
/* create n char pointers to hold equal parts of str1 */
char** p = calloc (n, sizeof(char*));
len = read - 1; /* null-terminator added by getline */
partsize = len / n;
#ifdef DEBUG
printf (" partsize: %zd, n: %d, len: %zd, str1: %s\n", partsize, n, len, str1);
#endif /* DEBUG */
if (len % n != 0) {
printf("Sorry");
} else {
ptr = str1; /* assign ptr to str1 */
for (i = 0; i < n; i++) { /* for each part */
p[i] = strndup (ptr, partsize); /* dup partsize chars */
ptr += partsize; /* advance pointer */
}
for (i = 0; i < n; i++) {
printf(" p[%d]: %s\n", i, *(p + i));
}
printf ("\n");
}
return 0;
}
构建:
gcc -Wall -Wextra -o bin/captr captr.c
使用 DEBUG 构建(如果需要):
gcc -Wall -Wextra -o bin/captr captr.c -DDEBUG
输出:
$ ./bin/captr
Please enter a string (of n parts) : 012345678901234567890123456789
Enter the number of parts for string : 3
p[0]: 0123456789
p[1]: 0123456789
p[2]: 0123456789
关于c - 无法访问字符指针数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25173523/