c - 当传递给函数指针然后返回到 c 中时,字符串打印出垃圾

标签 c string multidimensional-array

大家好,我是初学者,不熟悉指针,需要一些字符串方面的帮助。在它被传递到函数指针之后,它在我的主程序中计算后打印出垃圾。提前致谢。

int main() {

char str[3][10];
char firstm[10], secondm[10];
int i;

printf("Enter three string");
//get 3 strings from user

func1(&firstm, &secondm, str)
// prints junk
}

void func1(char *first, char *second, char arr[][10])
{
    ...computation here
    ...
    ...

    first = arr[0];
    last = arr[3];
    // prints out the string correctly

}

最佳答案

问题是您正在分配给 firstlast 指针。请记住,在 C 中,所有参数都是按值传递的,这意味着参数被复制。并且更改副本不会更改原件。

你应该做的是复制到字符串:

strcpy(first, arr[0]);
strcpy(last, arr[2]);

另一件需要注意的事情是,您传递了一个包含三个条目的数组作为函数的参数,但使用了第五个条目(arr[4])。这当然行不通,因为该数组中没有第五(或第四)个条目。

还有一些挑剔:数组自然会退化为指针,因此不需要在数组上使用寻址运算符来获取指针。事实上,如果您认为您有一个数组但实际上有一个指针,那可能会很危险。

关于c - 当传递给函数指针然后返回到 c 中时,字符串打印出垃圾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22138584/

相关文章:

javascript - 删除或忽略数组中的空单元格

此 C 代码会导致段错误吗?

C程序不读取输入,不给出输出

Java Swing - 拖放 drawString 文本

c - C 中字符串数组的类型转换问题

numpy - numpy.einsum 的惰性求值以避免在内存中存储中间大维数组

c - scanf() 不从控制台获取输入

C/String 数据从文件到数组。分段故障

mysql - 比较 MySQL 中的两个 ISO 日期时间字符串

java - 寻找二维数组中的特定元素