c - 切换字符串c语言

标签 c string char

我有这个程序,我想了解以下输出:

#include <stdio.h> 
void fastSwap (char **i, char **d) 
{ 
  char *t = *d; 
  *d = *i; 
  *i = t; 
} 
int main () 
{ 
 char num1[] = "hellohello"; 
 char num2[] = "classclass"; 
 fastSwap ((char**)&num1,(char**)&num2); 
 printf ("%s\n",num1); 
 printf ("%s\n",num2); 
 return 0; 
} 

输出只会改变 sizeof(void*) 个字符,而不是整个数组。

为什么会这样?

&num1char**,不是吗?

最佳答案

&num1 is char** isn't it?

它是 char (*)[11]。您转换为 char ** 的事实破坏了编译器的警告。

您正在做的是完全未定义的行为。您不能让 num1 指向其他地方,因为它没有指向任何地方开始:它是一个数组,而不是一个指针。

编辑

正如 Paul R 所指出的,这可能是正在发生的事情。每个字符串的第一个 sizeof(char *) 字符被解释为一个指针,然后交换它们。发生什么本质上取决于您的实现中指针的大小。这很有趣,但我很确定它仍然符合未定义的条件。

关于c - 切换字符串c语言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9180728/

相关文章:

java - 用逗号分隔数组列表中的字符 java

c - 将输入文件标记为链表

objective-c - #include <new> 未找到,但仅当从特定 header 引用该文件时?

c# - 如何格式化带有千位分隔符和小数点逗号的字符串?

java - 使用 StringTokenizer 和 String.split( ) 的区别?

C# 字符串 : why string a == b operator gives different answer than a. CompareTo(b) == 0?

C char数组,奇怪的字符

检查 docker alpine musl 版本

c - 如何从同一个套接字发送和接收?

c - 如何在c中将2D char数组转换为2D int