c - 修改 char *array[x][y]

标签 c arrays pointers

如何修改(增加 ASCII 值)char * 二维数组中的每个字符?

我现在有这段代码:

int riadky = 2;
int stlpce = 7;

char* x[riadky][stlpce];

int i,j;
for ( i = 0; i < riadky; i++)
    for (j = 0; j < stlpce; j++)
        x[i][j] = "test";

x[0][1] = "something";

for ( i = 0; i < riadky; i++){
    for (j = 0; j < stlpce; j++){
        printf("%s ", x[i][j]);
    }
        printf("\n");
}
printf("\n");

char * temp;
for ( i = 0; i < riadky; i++) {
    for (j = 0; j < stlpce; j++) {
        for (temp= x[i][j]; *temp; temp++) {
            (*temp)++;            //segmentation fault
        }
    }
}

当我运行它时,它在注释行出现段错误。


我试过了,但还是……段错误

char ***alloc_array(int x, int y) {
    char ***a = calloc(x, sizeof(char **));
    int i;
    for(i = 0; i != x; i++) {
        a[i] = calloc(y, sizeof(char *));
    }
    return a;
}

int main() {

    int riadky = 3;
    int stlpce = 7;
    char ***x = alloc_array(riadky, stlpce);

    int i,j;
    for ( i = 0; i < riadky; i++){
        for (j = 0; j < stlpce; j++){
            strcpy(x[i][j],"asdasd");
        }
    }
    return 0;
}

最佳答案

for ( i = 0; i < riadky; i++)
  for (j = 0; j < stlpce; j++)
    x[i][j] = "test";

x[0][1] = "something";

您正在初始化指向字符串文字的指针。允许(但不要求)编译器将字符串文字放在只读内存中。尝试修改其中之一可能会导致段错误。

您需要为您的字符串分配动态内存:

#include <stdlib.h>

...

for (...) {
  for (...) {
    x[i][j] = malloc (strlen (somestring)+1);
    if (x[i][j]) {
      strcpy (x[i][j], somestring);
    } else {
      /* Allocation error */
    }

其中 somestring 是字符串文字或包含要存储的字符串的变量。如果您以后需要存储更大的字符串,则必须 realloc() 您的指针。不要忘记 free() 使用完指针后。

我注意到您已经编辑了您的帖子以包含针对同一问题的另一次尝试,这次使用的是动态分配的数组而不是静态数组。但是您仍然没有为实际的字符串分配任何内存,只是一个指针数组。对于您的代码的两个 版本,我的答案应该不会改变。

关于c - 修改 char *array[x][y],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27071888/

相关文章:

c - 如何使用 malloc 将 C 中的 int 变量转换为 char *array?

javascript - 使用 Ramda 处理 Promise 和 Wait

javascript - 如何在一个循环中迭代以比较javascript中的两个对象

c - 如何将数组指针传递给函数?

c++ - 方法范围外取消引用的 char[] 指针的有效性

C unix 域套接字,recvfrom() 不设置 struct sockaddr* src_addr

划分两个 float 时的 C 怪异行为

php - 使用同一表中另一列的键更新 mysql 列

c - 在 C 中使用递归添加到完全二叉树

c - 如何从 Apache Web 服务器输入过滤器返回 HTTP 403?